我有以下批处理命令,它获取一个注册表项并为变量赋值,但是当该键不存在时显示错误
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>这时出人意料。
帮助/指导非常感谢
答案 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