我试图了解为什么批处理文件的第一行无法执行。我的代码如下:
if exist reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" goto OptionOne
exit
:OptionOne
some code
goto:eof
它永远不会进入OptionOne
子例程。相反,它只是退出。
对于此问题,我确实有不同的解决方案(因此,我不希望示例使之起作用),但我想了解为什么这一行无法执行。
答案 0 :(得分:1)
您拥有的代码不起作用,因为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
的{strong> (注册表项存在)或{{1} }或更大(不存在)。
答案 1 :(得分:0)
REG QUERY仅返回0表示成功或1表示失败。请注意,没有结果仍然是成功的查询操作,并且将返回0。
参考:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-query
正如评论员指出的那样,IF EXIST仅适用于文件和文件夹,不适用于命令。
答案 2 :(得分:0)
只需启动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%
。