回显但显示消息


75

我关闭了bat文件中的echo。

@echo off

然后我做这样的事情

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

我得到:

该系统找不到指定的路径。

这两个回声之间的消息。

此消息的原因可能是什么,为什么消息会忽略回显?


如果路径中有空格,是否将其引用?如果没有的话if exist "%INSTALL_PATH%" (...
Alex K.

3
即使将echo设置为off,也会显示警告,@echo off这仅表示不应将任何命令回显到终端。
Cyclonecode 2012年

除了在路径周围添加引号外,在(
dbenham 2012年

Answers:


116

正如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 2012年

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

我不确定您要完成什么,因为问题已接受答案...
Aleksandr Kravets

11
没什么,只是另一个答案。也许会比接受某人的答案更为明确。
瓦坎·坦卡

11

“回音”不被忽略。“回显”表示您不希望命令回显,它不说明命令所产生的错误。

您向我们显示的行看起来还不错,所以问题可能不存在。因此,请向我们显示更多行。另外,请向我们显示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'1

我之所以仅提及它,是因为有时您需要附加到变量中,并将引号作为值的一部分会更加困难。
Aphoria'1

2
此外,您不希望双反斜线......人会做,C:\etc etc\test
Aphoria'1

4

对我来说,此问题是由文件编码格式错误引起的。我使用了另一个编辑器,它被另存为,UTF-8-BOM所以我的第一行是,@echo off但是它的前面有一个隐藏的字符。

因此我将编码更改为纯ANSI文本,然后问题消失了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.