0

.bat 文件运行后的错误级别为 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,那么条件就会变得无效。

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

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

我正在学习这门语言,所以如果这是一个明显的错误,请多多包涵

谢谢

4

1 回答 1

2

我似乎记得%errorlevel%出于各种原因实际使用变量本身是一个坏主意,其中包括可以手动设置它的事实,这会将其与实际返回码断开连接。有关更多详细信息,请参阅Rob van der Woude 脚本页面上的此项目,这是在 Windows/DOS 下编写所有脚本的宝贵资源。

你应该使用类似的东西:

if errorlevel 1 ...

但是,我不完全确定您在这里认为什么是不正确的。是的,%errorlevel% 可以在脚本开始之前设置为零,但第一次调用会改变reg它,成功时将其设置为 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.
于 2013-12-11T00:54:49.337 回答