检查Errorlevel值并处理if命令

时间:2013-12-31 09:09:35

标签: sql batch-file cmd

我有一个特定的要求,即编写一个命令来检查注册表值并相应地处理。

我使用的命令是:

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有什么问题。

2 个答案:

答案 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")