【问题标题】:FOR tokens batch command can't hide error "ERROR: The system was unable to find..."FOR 令牌批处理命令无法隐藏错误“错误:系统无法找到...”
【发布时间】:2020-03-16 15:26:06
【问题描述】:

我正在做一个简单的脚本来检查 MS Office 版本读取注册表键值。将是密钥不存在的情况(未安装办公室)我多次使用 reg.exe 查询 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 /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

FOR /f "tokens=3" %%a in ('%SystemRoot%\System32\reg.exe query "HKEY_CLASSES_ROOT\Word.Application\CurVer" ^| %SystemRoot%\System32\findstr /C:"(Default)"'2>nul ) do set _Off_ver=%%a

在许多其他地方,但我最终得到了错误:

> was unexpected at this time.

任何人都知道我可以如何隐藏错误:

ERROR: The system was unable to find the specified registry key or value.

在那条 FOR 线里面?

谢谢

【问题讨论】:

  • 2^>nul ........
  • @jeb 谢谢!我刚刚发现了相同的,仍然不确定他们为什么在 FOR 中使用 ^,但会阅读它:)
  • 从您的问题中我不知道您是否尝试通过即点即用或 MSI 安装的 Office 产品确定版本。如果它是 2019 之前的 MSI 版本,请随时查看a previous answer of mine,它可以这样做,(在这种情况下,使用 Word 产品)。如果您对该答案有任何具体问题,请随时在该答案下适当发表评论。
  • 无法隐藏,也无法捕捉...

标签: batch-file cmd


【解决方案1】:

在 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

谢谢!

【讨论】:

  • 原因是:FOR里面的命令被批处理解析器解析,当有>|这样的未转义字符时,它会在FOR命令本身上使用,不在你的reg.exe 命令上,而且总是失败。
  • ^| 相同,您毫无疑问地这样做了。
  • 感谢您提供的信息,非常感谢! :)
猜你喜欢
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多