2013-10-03 22 views
7

我是這個論壇的新手,所以我首先要感謝您在我成爲成員之前向我提供解決方案:)。無法從批處理腳本中的失敗MOVE命令中獲取錯誤級別

所以我有這樣的代碼:

for %%a in ("%PBpath%") do ( 
move "network location 1 files" "network location 2" >NUL 
if ERRORLEVEL 0 (echo Diagram %%~na.pdf was successfuly archived) else (echo   Diagram %%~na.pdf was not archived) 
ECHO.%errorlevel% 
     ) 

的問題是,我不能比0不同,即使是要複製從位置缺少文件,我仍然得到了錯誤級別成功的歸檔消息迴應。我在論壇上搜索了類似的問題,但由於某種原因,我無法完成工作。 複製和ping命令之間有什麼不同(ping命令返回錯誤級別中的正確退出代碼),因爲我無法獲得它與任何複製或移動...

謝謝! 安德魯

回答

7

有關IF ERRORLEVEL語句奇怪的是,像你expect-如果錯誤級別等於或大於指定的數量則返回TRUE它不會採取行動。 MOVE中的失敗將錯誤級別設置爲1(我剛剛選中),它大於0.因此,總是會使用IF語句中的第一個子句。修復你的腳本最簡單的方法是反轉IF語句中的條件:

if ERRORLEVEL 1 (echo file was not archived) else (echo file was successfully archived) 
+0

謝謝您的回答。 Superbob的答案確實解決了我的問題,非常感謝。這確實是違反直覺的行爲。 但是,我的示例中的ECHO。%errorlevel%命令仍然返回0,因此在我的情況下它不會設置爲1。 至於Endoro的回答,你能更具體嗎?我嘗試使用%ERRORLEVEL%== 0,因爲沒有其他選項可以將errorlevel用作變量,但這裏也沒有結果。 – user2844129

+0

IF ERRORLEVEL 1和ECHO之間是否有任何語句?%errorlevel%?如果是這樣,他們可以重置錯誤級別。我只是嘗試'如果ERRORLEVEL 1(回聲ErrorLevel%ERRORLEVEL%,文件未存檔)其他(回聲ErrorLevel%ERRORLEVEL%,文件成功存檔)'並得到了預期的結果'ErrorLevel 1,文件未存檔' – Superbob

+0

不,我不'中間沒有任何東西,但是你是對的,它是有效的。問題在於我在for循環中回顯'%ERRORLEVEL%',並且啓用了DelayedExpansion。我必須使用!它的工作。感謝您的幫助! – user2844129

3

只需使用%ERRORLEVEL%變量,而不是ERRORLEVEL功能

0

如果想使用ERRORLEVEL功能,Superbob'sanswer地址這(儘管我會建議形式if NOT ERRORLEVEL 1 (echo file was successfully archived) else (echo file was not archived))。

但是,如果想要使用%ERRORLEVEL%變量方法,則需要打開Delayed Expansion。上面的OP代碼和推薦的更改如下:

setlocal enabledelayedexpansion 

for %%a in ("%PBpath%") do (
    move "network location 1 files" "network location 2" >NUL 
    if !ERRORLEVEL! equ 0 (
    echo Diagram %%~na.pdf was successfully archived 
) else (
    echo Diagram %%~na.pdf was not archived) 
) 
相關問題