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

G33*_*una 3 batch-file

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

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

有没有办法绕过异常?我在reg查询之后或在命令结束时尝试使用2> NUL但是我得到一个例外2>此时是意外的.

非常感谢帮助/指导

jeb*_*jeb 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
Run Code Online (Sandbox Code Playgroud)

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