我试图理解为什么我的批处理文件的第一行无法执行。我的代码如下:
if exist reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" goto OptionOne
exit
:OptionOne
some code
goto:eof
它永远不会进入OptionOne
子程序。相反,它只是退出。
我确实有一个解决这个问题的解决方案不同(所以我不想让它运行的例子)但我想知道为什么这一行无法执行。
您拥有的代码不起作用,因为if exist
仅用于检查文件夹或文件是否存在。它的语法是:
if exist "C:\foldername\" (do something) else (optionally do something else)
对于文件夹和:
if exist "C:\filename" (do something) else (optionally do something else)
对于文件。
我建议的解决方案(如评论中所述)如下:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" >nul 2>&1
if %errorlevel% EQU 0 (goto :OptionOne) else (echo Registry key not found. & pause>nul & exit /b 1)
:OptionOne
some code
goto :eof
检查命令是否返回errorlevel
不等于1
或更大(注册表项存在)或1
或更大(它不存在)。
REG QUERY仅返回0表示成功,或1表示失败。请注意,没有结果仍然是成功的查询操作,并将返回0。
参考:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-query
正如评论员所指出的那样,IF EXIST仅适用于文件和文件夹,不适用于命令。
只需启动reg query
并检查%errorlevel%
,如下所示:
Prompt>reg query "HKCU\..." (put something which exists)
<some successful answers>
Prompt>echo %errorlevel%
0
Prompt>reg query "blabla"
ERROR: Invalid key name.
Type "REG QUERY /?" for usage.
Prompt>echo %errorlevel%
1
您可以在批处理脚本中检查%errorlevel%
。