Windows批处理:将查询键值设置为变量,但如果键不存在则不显示错误

时间:2011-03-20 15:48:45

标签: batch-file

我有以下批处理命令,它获取一个注册表项并为变量赋值,但是当该键不存在时显示错误

for /f "tokens=2,*" %%a in ('reg query HKLM\Software\MySoftware\1.0\MyExecutable /v "InstallDir" ^| findstr InstallDir') do set InstallPath=%%b

有没有办法绕过异常?我在reg查询之后或在命令结束时尝试使用 2> NUL ,但我得到了一个例外 2>这时出人意料。

帮助/指导非常感谢

2 个答案:

答案 0 :(得分:5)

您应该像管道一样解决问题。 ^|
只需将其转义为2^>NUL

即可

所以你得到了

for /f "tokens=2,*" %%a in ('reg query HKLM\Software\MySoftware\1.0\MyExecutable /v "InstallDir" 2^>NUL ^| findstr InstallDir') do set InstallPath=%%b

这是必要的,因为FOR-Loop的命令部分将被解析两次。 首先在批处理文件的上下文中(2> NUL是意外的),第二次在新的cmd.exe上下文中(其中2> NUL重定向reg命令的stderr)

答案 1 :(得分:0)

在reg查询后你把它放在哪里?这应该工作(看看在findstr之前):

for /f "tokens=2,*" %%a in ('reg query HKLM\Software\MySoftware\1.0\MyExecutable /v "InstallDir" 2>NUL ^| findstr InstallDir') do set InstallPath=%%b