关闭回显但显示消息

84

我在批处理文件中关闭了回显。

@echo off

然后我做了这样的事情

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

我得到了:

系统找不到指定的路径。

这两个回显之间的消息是什么?

这个消息的原因是什么,为什么消息会忽略echo off?


1
如果路径中有空格,它是否被引用?如果没有,则为 if exist "%INSTALL_PATH%" (... - Alex K.
4
即使你已将回显关闭,警告信息仍会显示。@echo off 只是意味着不应该将任何命令回显到终端。 - Cyclonecode
1
除了在路径周围添加引号之外,还需要在括号前添加一个空格。 - dbenham
6个回答

127

正如Mike Nakis所说,echo off仅阻止命令的输出,而不是结果。 要隐藏命令的结果,请在行尾添加>nul,要隐藏错误,请添加2>nul。例如:

Del /Q *.tmp >nul 2>nul

就像Krister Andersson所说的那样,你之所以会出现错误是因为你的变量扩展了空格:

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

这意味着:

如果"C:\My"存在,则使用"("作为命令行参数运行"App\Installer"。

你看到此错误是因为没有名为"App"的文件夹。在路径周围加上引号以防止拆分。


我已经引用了%INSTALL_PATH%。那个消息消失了,但我得到了一个新的错误:“(在此时意外。”我会问另一个问题。谢谢! - Aleksandr Kravets

51

将此保存为*.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

我不确定你想要达到什么目的,因为这个问题已经有了被接受的答案... - Aleksandr Kravets
15
没什么,只是另一个答案。对某些人来说,它可能比被接受的答案更清晰明了。 - Wakan Tanka

12
"

"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%” - aphoria
我之所以提到这一点,是因为有时您需要将变量附加到引号中作为值的一部分,这会使操作变得更加困难。 - aphoria
2
另外,您不需要双反斜杠...一个就够了,C:\etc etc\test - aphoria

4
对我而言,这个问题是由于文件编码格式错误引起的。我使用了另一个编辑器并将其保存为UTF-8-BOM,所以我第一行是@echo off,但它前面有一个隐藏字符。
因此,我将编码更改为普通的ANSI文本,然后问题就消失了。

-1
将文档保存为ANSI格式。
你可以使用Notepad++。

这可能对你有用。但最初它没有起作用的真正原因可能并不是这么微不足道。总的来说,我建议不要忽视几十年来在文本编码方面取得的进展。使用UTF-8编码。 - undefined
请不要假设地球上的每个人都使用Windows(Notepad++是一个Windows程序)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接