2013-12-11 51 views
0

的錯誤級別只要.bat文件運行是0。但是我使用錯誤級別爲條件,如:批處理文件,錯誤級別設置爲0,在啓動時

REG Query HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\test 2>NUL>>MMG.dat 
If %ERRORLEVEL% == 0 goto turnon 

REG Query HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\test2>NUL>>MMG.dat 
If %ERRORLEVEL% == 0 goto turnon 

REG Query HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\test 3>NUL>>MMG.dat 
If %ERRORLEVEL% == 0 goto turnon 
If %ERRORLEVEL% == 1 goto EOF 

我的問題是,如果錯誤級別已經設置爲0,則條件變爲無效。

無論如何,我可以解決這個問題嗎?

注意:錯誤級別不在文件的任何位置設置。

我學習這種語言,所以請原諒如果明顯錯誤

感謝

+0

你是什麼意思,「如果errorlevel已經設置爲0」?你的意思是設置了名稱爲ERRORLEVEL的環境變量嗎? (你可以使用'set'命令列出所有的環境變量。)否則,你沒有問題,因爲一旦你運行一個新的命令,任何以前的錯誤級別都會被遺忘。 –

+0

未設置環境錯誤級別變量。當我啓動腳本時,錯誤級別已經爲0(我在腳本的最頂部添加echo ERRORLEVEL IS:%errorlevel%來顯示錯誤級別)我的問題是我使用errorlevel作爲條件(參見上面的示例),如果錯誤級別已經爲0,那麼該條件將從預期的腳本變爲無效。我有一個reg條件查詢,在每個條件下都有「if」條件,如果reg值存在(errorlevel 0),用goto命令提醒用戶。 – DaE

+2

錯誤級別「已經是」並不重要。每次運行'reg'命令時,錯誤級別都會改變,所以當您測試%ERRORLEVEL%時,您只能從前面的命令中獲得結果。 –

回答

2

我似乎記得,這是一個壞主意,實際使用%errorlevel%變量本身出於各種原因,其中可以手動設置的事實將其從實際返回代碼斷開。有關更多詳細信息,請參閱this item on Rob van der Woude's scripting pages,這是Windows/DOS下所有腳本編寫的寶貴資源。

您應該使用類似:

if errorlevel 1 ... 

不過,我並不完全一定你考慮是不正確的在這裏。是的,%errorlevel%可能在腳本啓動之前被設置爲零,但會被第一次調用reg更改爲0,成功時設爲0,失敗時設爲1。

如果你的目的是爲了做一些事情應該reg query失敗,只需使用:

reg query 1 blah blah blah 
if errorlevel 1 goto turnon 

reg query 2 yak yak yak 
if errorlevel 1 goto turnon 

reg query 1 bjork brork bjork 
if errorlevel 1 goto turnon 

如果是做一些事情(如警報的任何失敗根據您的問題/評論),你有那麼什麼是好的,只是稍微不同的方法和值:

set bad=0 

reg query 1 blah blah blah 
if errorlevel 1 goto alert 

reg query 2 yak yak yak 
if errorlevel 1 goto alert 

reg query 1 bjork brork bjork 
if errorlevel 1 goto alert 

rem all queries returned success. 
+0

對不起,如果我錯了,但如果發現一個reg值的錯誤級別應該是0,並因此啓動。但是,如果錯誤級別已經設置爲0並且reg值不存在並且運行(if)條件,那麼它仍然會隨着錯誤級別爲0而啓動on – DaE

+0

@DaE:否,如果reg可執行文件不找到關鍵字,它會將錯誤級別設置爲1.使用'reg query hkey_current_user'和'reg query hkey_nosuch_user'嘗試使用'echo%errorlevel%'後面的'reg'hkey_nosuch_user'。 – paxdiablo

+0

感謝您對此的幫助。 if語句實際上是在發現該值時發出警報,例如, '代碼REG查詢HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ test 2> NUL >> MMG.dat 如果%ERRORLEVEL%== 0 goto alert REG查詢HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ test2> NUL >> MMG.dat If%ERRORLEVEL%== 0 goto alert REG查詢HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ test 3> NUL >> MMG.dat 如果%ERRORLEVEL%= = 0 goto alert If%ERRORLEVEL%== 1 goto EOF'因此,理想的結果是如果沒有找到該值 – DaE