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

问题描述 投票:-2回答:3

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

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

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

我确实有一个解决这个问题的解决方案不同(所以我不想让它运行的例子)但我想知道为什么这一行无法执行。

  • 语法不正确吗?谷歌表示这是正确的。
  • 代码设计不佳?我知道这个注册表项存在,所以情况并非如此。
  • 它是返回值及其正确语法的东西,但需要在else语句中进一步写出来吗?
batch-file syntax
3个回答
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或更大(注册表项存在)或1或更大(它不存在)。


0
投票

REG QUERY仅返回0表示成功,或1表示失败。请注意,没有结果仍然是成功的查询操作,并将返回0。

参考:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-query

正如评论员所指出的那样,IF EXIST仅适用于文件和文件夹,不适用于命令。


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%

© www.soinside.com 2019 - 2024. All rights reserved.