2012-01-11 115 views
53

我關閉了bat文件中的回聲。回聲消息但顯示消息

@echo off 

然後我做這樣的事情

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

,我也得到:

該系統找不到指定的路徑。

這兩個回聲之間的消息。

此消息的原因是什麼以及消息忽略回顯的原因是什麼?

+0

如果路徑中有空格,是否有引號?如果不存在「%INSTALL_PATH%」(...' – 2012-01-11 17:23:25

+2

即使將回顯設置爲off,「@echo off」也會顯示警告,這意味着沒有命令應回顯給終端。 – Cyclonecode 2012-01-11 17:29:23

+0

除了在路徑中添加引號之外,還可以在( – dbenham 2012-01-11 17:50:52

回答

95

正如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 \ Install呃「與」(「作爲命令行參數。

由於沒有名爲「App」的文件夾,您會看到該錯誤。在路徑上加上引號以防止這種分裂。

+0

我引用了%INSTALL_PATH%。該消息消失了,但我得到了新的錯誤。「(此時意外。」我會問另一個問題。謝謝! – 2012-01-12 09:12:24

10

「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%」'。 – aphoria 2012-01-11 17:48:09

+0

@aphoria - Jupp, – Cyclonecode 2012-01-11 17:54:39

+0

我只提到它,因爲有時你需要追加到變量中,並將引號作爲值的一部分使得更加困難 – aphoria 2012-01-11 18:56:26

19

保存爲* .bat文件,看看差別

:: print echo command and it's output 
echo 1 

:: does not print echo command just it's output 
@echo 2 

:: print dir command but not it's output 
dir > null 

:: does not print dir command nor it's output 
@dir c:\ > null 

:: does not print echo (and all other commands) but print it's 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 
+0

I 'm不知道你試圖完成什麼,因爲這個問題已經接受了答案... – 2016-05-27 20:24:29

+5

沒什麼,只是另一個答案。也許它會比接受答案更清楚對某人。 – 2016-05-27 20:26:23

+0

我希望它會:) – 2016-05-28 11:45:01

0

對我來說,這個問題是由文件的編碼格式是錯誤引起的。 我用另一個編輯器,它被保存爲UTF-8-BOM,所以我的第一行是@echo off,但在它的前面有一個隱藏的字符。

因此,我將編碼更改爲普通舊ANSI文本,然後問題就消失了。