Echo off but messages are displayed

340,552

Solution 1

As Mike Nakis said, echo off only prevents the printing of commands, not results. To hide the result of a command add >nul to the end of the line, and to hide errors add 2>nul. For example:

Del /Q *.tmp >nul 2>nul

Like Krister Andersson said, the reason you get an error is your variable is expanding with spaces:

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

Becomes:

if exist C:\My App\Installer (

Which means:

If "C:\My" exists, run "App\Installer" with "(" as the command line argument.

You see the error because you have no folder named "App". Put quotes around the path to prevent this splitting.

Solution 2

Save this as *.bat file and see differences

:: 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

Solution 3

"echo off" is not ignored. "echo off" means that you do not want the commands echoed, it does not say anything about the errors produced by the commands.

The lines you showed us look okay, so the problem is probably not there. So, please show us more lines. Also, please show us the exact value of INSTALL_PATH.

Solution 4

For me this issue was caused by the file encoding format being wrong. I used another editor and it was saved as UTF-8-BOM so the very first line I had was @echo off but there was a hidden character in the front of it.

So I changed the encoding to plain old ANSI text, and then the issue went away.

Solution 5

@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;
)
Share:
340,552

Related videos on Youtube

Aleksandr Kravets
Author by

Aleksandr Kravets

Java developer

Updated on July 05, 2022

Comments

  • Aleksandr Kravets
    Aleksandr Kravets almost 2 years

    I turned off echo in bat file.

    @echo off
    

    then I do something like this

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

    and I get:

    The system cannot find the path specified.

    message between those two echos.

    What can be the reason of this message and why message ignores echo off?

    • Alex K.
      Alex K. over 12 years
      If the path has spaces is it quoted? if not if exist "%INSTALL_PATH%" (...
    • Cyclonecode
      Cyclonecode over 12 years
      Warnings are displayed even if you are set echo to off, @echo off just means that no commands should be echoed to the terminal.
    • dbenham
      dbenham over 12 years
      In addition to adding quotes around the path, add a space before the (
  • jonsinfinity
    jonsinfinity over 12 years
    You can also put the quotes around the variable: IF EXIST "%INSTALL_PATH%".
  • jonsinfinity
    jonsinfinity over 12 years
    I only mention it because sometimes you need to append to variable and having the quotes as part of the value make that more difficult.
  • jonsinfinity
    jonsinfinity over 12 years
    Also, you don't want the double backslashes...one will do, C:\etc etc\test.
  • Aleksandr Kravets
    Aleksandr Kravets over 12 years
    i've quotted %INSTALL_PATH%. that message disapeared. but i've got new error. "( was unexpected at this time." i'll ask another question. Thanks!
  • Aleksandr Kravets
    Aleksandr Kravets about 8 years
    I'm not sure what you're trying to accomplish since the question has accepted answer...
  • Wakan Tanka
    Wakan Tanka about 8 years
    Nothing, just another answer. Maybe it will be more clear than aaccepted answer to someone.