2010-04-07 36 views
0

這與我先前的問題有關。批處理文件 - 即使在失敗時,REN命令的ErrorLevel返回0

ren "C:\Temp\%%A" "%%A" 
if errorlevel 0 (
      "C:\Program Files\7-Zip\cmdline\7za.exe" a -tzip -mx9 "C:\temp\Zip\%%A.zip" "C:\temp\%%A" 
      Move "C:\temp\%%A" "C:\Temp\Archive" 
       ) 

在上面,即使REN命令失敗,IF總是評估爲真。

這個想法是檢查一個文件是否沒有被任何其他應用程序鎖定,如果沒有的話,將它歸檔並將它移動到別處。

如何做到最好?

謝謝。

+0

你應該接受[弗蘭克Bollack的答案](http://stackoverflow.com/questions/2593133/batch -file-ren-commands-errorlevel-returns-0-even-on-failure/2601154#2601154)而不是當前接受的[rossmcm,這是錯誤的答案](http://stackoverflow.com/questions/2593133/批處理文件仁的命令-錯誤級別-返回-O-偶數接通故障/ 6969940#6969940)。 (請參閱我的評論。) – Sk8erPeter 2013-10-10 21:24:25

回答

5

在命令行上鍵入help if以獲取有關錯誤級別處理的一些信息。

與您的代碼的問題是,該表達式IF ERRORLEVEL N被評估爲真用於任何數目等於或大於N

一般僅ERRORLEVEL 0表示成功,任何其他(更高)值是一些標誌錯誤。爲了簡單檢查,是否也發生了錯誤,扭轉你的支票:

IF NOT ERRORLEVEL 1 (
    REM your code here 
) 

或作爲替代,退出腳本:

IF ERRORLEVEL 1 EXIT /B 
-1

,你也可以做出rem.bat那會令錯誤級別調用像這樣IF ERRORLEVEL == 300 call rem.bat或者您可以使用0的級別解鎖每個錯誤級別。您可以在事物上添加varrie,這不僅會使應用程序運行更順暢,而且它會創建無滯後風扇的速度將保持不變,錯誤級別將使用更多的CPU使用。

+3

這個答案對我來說是難以理解的。請進一步解釋。 – rossmcm 2011-08-07 00:32:57

-1

任志強是一個內部命令,並且不設置ERRORLEVEL(我在尋找相同的答案here

+3

在哪個環境?我在Windows 7(x64)下測試了它,並且它工作正常:一個不成功的'ren'命令將'ERRORLEVEL'設置爲'1'。這是一個非常簡單的代碼:http://pastebin.com/z1EBZ2Em。我創建了2個測試文件,重命名它們會導致「拒絕訪問」或「系統找不到指定的文件」。錯誤,他們都將'ERRORLEVEL'設置爲'1'。看看這個截圖(第一次,'asdsad.txt'可以被成功重命名,將ERRORLEVEL設置爲0):http://i.imgur.com/BQb2Ydg.png。那麼你在哪裏測試它?如果發生故障,'REN'應該將'ERRORLEVEL'設置爲1。 – Sk8erPeter 2013-10-09 12:33:19

+0

@ Sk8erPeter我在XPSP3下測試了你的批處理代碼,是的,它似乎工作正常。我真的不知道我的意見是基於什麼。我乾草一直在垃圾環境中工作。 – rossmcm 2013-10-10 19:30:21

+0

我真的不明白爲什麼@FMFF接受了這個答案......:D – Sk8erPeter 2013-10-10 21:03:00

相關問題