我有一个特定的要求,即编写一个命令来检查注册表值并相应地处理。
我使用的命令是:
reg query "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" /v MSSQLSERVER > nul & if %ERRORLEVEL% NEQ 0 (echo "SQL Not Installed") else (echo "SQL Installed")
第一次,自errorlevel value is 0
以来,它显示
SQL Installed
即使SQL未安装,并且从下一次连续运行开始,它显示为:
SQL未安装
cmd有什么问题。
答案 0 :(得分:2)
代码的“问题”是当解析器到达该行时,%errorlevel%
变量将替换为其值,然后执行该行。因此,没有看到变量值的任何变化。处理这种情况的“通常”方式是启用延迟扩展并使用%errorlevel%
更改!errorlevel!
sintax,以指示解析器值将更改并需要在执行时检索。
但是,在这种情况下,由于您需要“一个班轮”,请将if
测试更改为
if errorlevel 1 (echo "SQL Not Installed") else (echo "SQL Installed")
用于检查errorlevel而不读取变量值的标准构造。
您还可以将其编码为
reg query .... && echo Installed || echo Not Installed
执行reg
命令(当然包含所有参数)。成功时,执行&&
之后的命令。失败时,执行||
之后的命令。
答案 1 :(得分:0)
if ERRORLEVEL 1
应该有效:
reg query "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" /v MSSQLSERVER > nul & if ERRORLEVEL 1 (echo "SQL Not Installed") else (echo "SQL Installed")