批处理文件errorlevel在启动时设置为0

时间:2013-12-11 00:50:21

标签: windows batch-file command errorlevel

运行.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,则条件变为无效。

他们无论如何我可以解决这个问题吗?

注意:错误级别未在文件中的任何位置设置。

我正在学习这门语言,如果这是一个明显的错误,请耐心等待。

由于

1 个答案:

答案 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.