Batch file 对于令牌,批处理命令可以';t隐藏错误“;错误:系统无法找到…”;
我正在做一个简单的脚本来检查MS Office版本读取注册表键值。将出现密钥不存在(未安装office)的情况,我多次使用reg.exe query key/Check 2>nul,但无法在FOR行中使用。 这是一行:Batch file 对于令牌,批处理命令可以';t隐藏错误“;错误:系统无法找到…”;,batch-file,cmd,Batch File,Cmd,我正在做一个简单的脚本来检查MS Office版本读取注册表键值。将出现密钥不存在(未安装office)的情况,我多次使用reg.exe query key/Check 2>nul,但无法在FOR行中使用。 这是一行: FOR /f "tokens=3" %%a in ('%SystemRoot%\System32\reg.exe query "HKEY_CLASSES_ROOT\Word.Application\CurVer" ^| %SystemRoot%\System32\findstr
FOR /f "tokens=3" %%a in ('%SystemRoot%\System32\reg.exe query "HKEY_CLASSES_ROOT\Word.Application\CurVer" ^| %SystemRoot%\System32\findstr /C:"(Default)"') do set _Off_ver=%%a
我试过:
FOR /f "tokens=3" %%a in ('%SystemRoot%\System32\reg.exe query "HKEY_CLASSES_ROOT\Word.Application\CurVer" 2>nul ^| %SystemRoot%\System32\findstr /C:"(Default)"') do set _Off_ver=%%a
或
在许多其他地方,但我最终犯了一个错误:
> was unexpected at this time.
任何人都知道我如何隐藏错误:
ERROR: The system was unable to find the specified registry key or value.
在那条线里面
谢谢在Jeb回复的同时,我发现一篇帖子(实际上与此无关)使用了2^>nul。我不知道为什么^,但它起作用了 最后一行是:
FOR /f "tokens=3" %%a in ('%SystemRoot%\System32\reg.exe query "HKEY_CLASSES_ROOT\Word.Application\CurVer" 2^> nul ^| %SystemRoot%\System32\findstr /C:"(Default)"') do set _Off_ver=%%a
谢谢
2^>nul
。@jeb谢谢!我刚刚发现了同样的问题,仍然不确定他们为什么在FOR中使用“^”,但将阅读:)从您的问题中,我不知道您是否试图通过单击运行或MSI安装的Office产品来确定版本。如果它是2019年之前的MSI版本,请随意查看哪些可以这样做(在这种情况下,请使用“产品”一词)。如果您有任何特定于该答案的问题,请随时在该答案下进行适当的评论。原因是:FOR中的命令由批处理解析器解析,当存在类似
或|
的未转义字符时,它将用于FOR
命令本身,而不是reg.exe
命令,这总是失败的。和你毫无疑问地完成的^ |
一样。谢谢你提供的信息,我真的很感激!)
FOR /f "tokens=3" %%a in ('%SystemRoot%\System32\reg.exe query "HKEY_CLASSES_ROOT\Word.Application\CurVer" 2^> nul ^| %SystemRoot%\System32\findstr /C:"(Default)"') do set _Off_ver=%%a