【发布时间】:2019-05-03 08:35:48
【问题描述】:
我对 CMD 有点陌生,希望这里有人可以帮助我。
在我的一个旧安装脚本中,我现在需要检查是否安装了 .NET 3.5,然后根据结果安装 3.5 包或继续执行脚本。
现在我在尝试检查脚本中安装的版本时遇到了一些麻烦。
我使用这个 reg 查询来查找已安装的版本:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP" | Find "3.5"
如果安装了 3.5,则输出一行,否则不输出:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5
现在我的想法是,创建一个变量并用上面看到的输出填充值。
不幸的是:
set DNFound=reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP" | Find "3.5"
if not exist %DNFound%
(
install framework
)
不起作用,因为输出不会保存在变量中。
我进行了一些研究,看到人们使用这种格式的循环来将 reg 查询输出中的单个值获取到变量中(示例代码):
for /f "tokens=3" %%x in ('reg query HKLM\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile /v EnableFirewall') do set FWSTATUS=%%x
但是,当我尝试执行相同操作时出现语法错误,因为我的 reg 查询中的 | Find "3.5" 部分。
【问题讨论】:
-
因为涉及到第二个 cmd.exe 实例,您需要使用插入符号
^|转义管道符号,您还应该将错误流重定向到 nul2^>NUL。 -
感谢您的提示,我转义了管道符号并让命令正常工作。这样做的时候发现自己的思维过程是错误的,这里我不检查变量是否存在,而是变量的内容是否存在。所以无论如何我都得走另一条路。
-
我只是想补充一下,你的问题似乎有点奇怪,事实上 v3.5 与
Windows 7的操作系统是一体的,这意味着你如果操作系统至少有 10 年的历史,则只需要检查它,(XP 到 Vista/Server 2008 R2)。 -
我们几乎所有的 W10-Workstation 都只安装了 .NET 4.0 及更高版本。
-
从 Windows 7 开始的每个 Windows 版本,(这意味着您的每个 Windows 10 工作站),已经安装了最低版本的
3.5。您的任务无关紧要,因为绝对不需要在其中任何一个上安装它。
标签: .net windows batch-file cmd registry