.net - 将 reg 查询输出放入变量中
问题描述
我对 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
| Find "3.5"
但是,由于我的 reg 查询中的一部分,当我尝试执行相同操作时出现语法错误。
解决方案
作为对您问题的补充,因为它可能与未来的用户相关,您应该能够使用类似于以下的方法输出所有已安装的版本:
@Echo Off
SetLocal EnableDelayedExpansion
Set "rk=HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP"
Set/A "vi=ri=0"
For /F "Tokens=3*" %%A In ('Reg Query "%rk%" /F v /K') Do If "%%B"=="" (
If Not "%%~xA"=="" (Set/A "vi+=1"
For /F "Tokens=2*" %%C In (
'Reg Query "%rk%\%%~nxA" /V Version 2^>Nul^|Find /V "\"'
) Do Set "_v!vi!=%%D"
) Else (Set/A "ri+=1"
For /F "Tokens=2*" %%E In (
'Reg Query "%rk%\%%~nxA\Full" /V Release 2^>Nul^|Find /V "\"'
) Do Set/A "_r!ri!=%%F"))
If %ri% Gtr 0 (Set/A "vi+=1"
For /F "Tokens=2" %%A In ('FindStr/B "!_r%ri%!" "%~f0"'
) Do Set "_v%vi%=%%A")
If %vi% Gtr 0 For /F "Tokens=1* Delims==" %%A In ('Set _v') Do Echo([%%B]
Pause
GoTo :EOF
Rem Later Version Table - do not remove
378389 4.5
378675 4.5.1
378758 4.5.1
379893 4.5.2
393295 4.6
393297 4.6
394254 4.6.1
394271 4.6.1
394802 4.6.2
394806 4.6.2
460798 4.7
460805 4.7
461308 4.7.1
461310 4.7.1
461808 4.7.2
461814 4.7.2
528040 4.8
528049 4.8
当新版本出来时,您只需使用相关信息更新底部的内容,这样检测将保持最新。
推荐阅读
- graphql - 是否可以将动态类型的数据发送到 GraphQL,或者修改现有模式?
- python - Pandas 组合了多个数据透视表
- r - 是否可以为一个缺失值包含 NA,我可以验证每个人是否与我指定的函数相对应
- python - 如何使用上传(从火车)方法中的变量来预测方法?
- html - python 3中的Jinja2 html表示
- c++ - 未定义的引用在哪里?
- android - 收到短信后立即过期的短信代码
- wordpress - Wordpress - 自定义链接到媒体库之外的外部文件
- ios - (Swift)如何在字符串中查找与正则表达式匹配的所有字符串
- acumatica - 为什么我的自定义管理器屏幕不显示项目