2013-01-18 44 views
3

例如,在一個批處理文件,我輸入下面的命令:如何知道命令是否通過批處理文件成功執行?

XCOPY C:\ fileA.txt d:\風向\/Y/d

,如果沒有一個文件將絕對失敗稱爲fileA.txt。但我想知道它是否失敗,然後輸出一些消息給用戶。我怎樣才能做到這一點?

任何幫助將不勝感激,謝謝!

+0

可能重複檢查非零(錯誤)返回代碼在Windows批處理文件](http://stackoverflow.com/questions/10935693/foolproof-way-to-check-for-nonzero-error-return-code-in-windows-batch-file) – dbenham

回答

10

大多數命令/程序在成功時返回0,並返回一些其他值,稱爲錯誤級別,表示發生錯誤。

您可以通過

if not errorlevel 0 goto ERR 

XCOPY errorlevels在你批量例如檢查此:

0 - 所有文件都沒有錯誤複製

1 - 沒有文件被發現複製(無效源)

2 - XCOPY通過Ctrl-C鍵封端的複製完成之前

4 - 發生初始化錯誤。

5 - 發生磁盤寫入錯誤。

[1] http://m.computing.net/answers/dos/xcopy-errorlevels/7510.html

+0

謝謝!我不知道有一個變量用於存儲返回值。通過我的進一步測試,我必須測試從大數到小數的錯誤級別的值。否則,它會異常工作。 – SeaStar

+0

對!正如在另一個答案中的鏈接中指出的那樣,「如果errorlevel'具有這個奇怪的屬性:*如果返回代碼等於或高於指定的錯誤級別*,它將返回TRUE。 – shinjin

3

我認爲你感興趣的是「錯誤級別」。見http://www.robvanderwoude.com/errorlevel.php。基本上,在您的批處理文件,你可以這樣

IF ERRORLEVEL 1 <do something> 
IF ERRORLEVEL 2 <do something> 

其中1和2是由執行的最後一個程序返回的狀態代碼的可能值檢查命令(類似Unix或Linux)的狀態代碼。您也可以執行如下操作:

echo %ERRORLEVEL% 

可打印出狀態碼,但請注意,它並不總是像「正常」環境變量那樣工作。有一點讓它變得不同的是,它不會顯示「set」命令。

+0

非常感謝!它也幫助我。但是我擔心我只能接受一個答案。 – SeaStar

2

我找到了公認的答案沒有工作,但這樣做的:

if %ERRORLEVEL% neq 0 goto ERR 
的[萬無一失的方法
相關問題