运行.bat文件时的错误级别为0.但是我使用errorlevel作为条件,例如:
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
我的问题是如果errorlevel已经设置为0,则条件变为无效。
他们无论如何我可以解决这个问题吗?
注意:错误级别未在文件中的任何位置设置。
我正在学习这门语言,如果这是一个明显的错误,请耐心等待。
由于
答案 0 :(得分:2)
我似乎记得,出于各种原因实际使用%errorlevel%
变量本身是一个坏主意,其中包括可以手动设置它与实际返回码断开连接的事实。有关更多详细信息,请参阅this item on Rob van der Woude's scripting pages,这是Windows / DOS下所有脚本编写的宝贵资源。
你应该使用类似的东西:
if errorlevel 1 ...
然而,我并非完全确定您认为这里不正确的内容。是的,%errorlevel%
可以在脚本启动之前设置为零,但是第一次调用reg
会更改,这会在成功时将其设置为0或者在成功时将其设置为0故障。
如果您的意图是在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.