Ехо вимкнено, але відображаються повідомлення


75

Я вимкнув ехо у файлі bat.

@echo off

тоді я роблю щось подібне

...
echo %INSTALL_PATH%
if exist %INSTALL_PATH%(
echo 222
...
)

і я отримую:

Система не може знайти вказаний шлях.

повідомлення між цими двома відлуннями.

Що може бути причиною цього повідомлення і чому повідомлення ігнорує відлуння?


Якщо шлях має пробіли, це в лапках? якщо ніif exist "%INSTALL_PATH%" (...
Алекс К.

3
Попередження відображаються, навіть якщо для вас встановлено значення echo, це @echo offпросто означає, що жодні команди не повинні надходити на термінал.
Cyclonecode

На додаток до додавання лапок навколо шляху, додайте пробіл перед (
dbenham

Відповіді:


116

Як сказав Майк Накіс , echo offлише перешкоджає друку команд, а не результатів. Щоб приховати результат команди, додайте >nulв кінець рядка, а щоб приховати помилки додайте 2>nul. Наприклад:

Del /Q *.tmp >nul 2>nul

Як сказав Крістер Андерссон , причиною появи помилки є те, що ваша змінна розширюється пробілами:

set INSTALL_PATH=C:\My App\Installer
if exist %INSTALL_PATH% (

Стає:

if exist C:\My App\Installer (

Що означає:

Якщо "C: \ My" існує, запустіть "App \ Installer" із "(" як аргумент командного рядка.

Ви бачите помилку, оскільки у вас немає папки з назвою "App". Поставте лапки навколо шляху, щоб запобігти цьому розбиттю.


я процитував% INSTALL_PATH%. це повідомлення зникло. але у мене нова помилка. "(в цей час було несподіваним.") задам ще одне запитання. Дякую!
Олександр Кравець,

43

Збережіть це як * .bat файл і перегляньте відмінності

:: print echo command and its output
echo 1

:: does not print echo command just its output
@echo 2

:: print dir command but not its output
dir > null

:: does not print dir command nor its output
@dir c:\ > null

:: does not print echo (and all other commands) but print its output
@echo off
echo 3

@echo on
REM this comment will appear in console if 'echo off' was not set

@set /p pressedKey=Press any key to exit

Я не впевнений, що ви намагаєтесь досягти, оскільки запитання прийняло відповідь ...
Олександр Кравець,

11
Нічого, лише чергова відповідь. Можливо, це буде зрозуміліше, ніж прийнята відповідь комусь.
Вакан Танка

11

"echo off" не ігнорується. "echo off" означає, що ви не хочете, щоб команди повторювались, це нічого не говорить про помилки, що створюються командами.

Рядки, які ви нам показали, виглядають нормально, тому проблема, мабуть, не в цьому. Тож, будь ласка, покажіть нам більше рядків. Також, будь ласка, покажіть нам точне значення INSTALL_PATH.


4
@echo off
// quote the path or else it won't work if there are spaces in the path
SET INSTALL_PATH="c:\\etc etc\\test";
if exist %INSTALL_PATH% (
   //
   echo 222;
)

1
Ви можете також помістити лапки навколо змінної: IF EXIST "%INSTALL_PATH%".
афорія

Я згадую це лише тому, що іноді вам потрібно додати до змінної, а наявність лапок як частини значення ускладнює це.
афорія

2
Крім того , ви не хочете , щоб два рази поспіль ... один буде робити, C:\etc etc\test.
афорія

4

Для мене ця проблема була спричинена неправильним форматом кодування файлу. Я використав інший редактор, і його було збережено, оскільки UTF-8-BOMнайперший рядок у мене був, @echo offале перед ним був прихований символ.

Тож я змінив кодування на звичайний старий ANSIтекст, а потім проблема зникла.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.