为什么批处理文件的第一行无法执行?

时间:2019-03-22 13:19:21

标签: batch-file syntax

我试图了解为什么批处理文件的第一行无法执行。我的代码如下:

if exist reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" goto OptionOne
exit
:OptionOne
some code
goto:eof

它永远不会进入OptionOne子例程。相反,它只是退出。

对于此问题,我确实有不同的解决方案(因此,我不希望示例使之起作用),但我想了解为什么这一行无法执行。

  • 语法不正确吗? Google说的没错。
  • 设计不良的代码?我知道此注册表项存在,所以不是这种情况。
  • 它是否具有返回值及其正确的语法,但需要在else语句上进一步写出吗?

3 个答案:

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