在详细介绍之前,我想强调一个事实,即使用 PowerShell 不是一种选择,因为脚本应该在 PowerShell 可能不可用的机器上运行。
我需要检查安装在 Windows 机器上的 Internet Explorer 版本,并根据它的版本采取行动。
到目前为止,我的批处理脚本如下所示:
@echo off
setlocal
for /f "tokens=*" %%a in ( 'reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer" /v Version' ) do ( set IEVerReg=%%a )
endlocal
如您所见,我正在将 reg query
输出分配给 IEVarReg 变量。不同 Windows 版本的输出不同,示例:
Windows XP:
! REG.EXE VERSION 3.0
HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer
Version REG_SZ 8.0.6001.18702
Windows 7:
HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer
Version REG_SZ 9.0.8112.16421
理想情况下,我想从版本号中获取第一位数字并执行如下操作:
if
version == 8
then
execute this
elseif
version == 9
then
execute that
我确定一旦获得版本号我就会弄清楚如何执行 if
部分,但这是我无法弄清楚的获取版本号部分。我可以使用 bash、perl 等轻松完成,但对 Windows 命令行一无所知。
非常感谢您的帮助。
附言。我看过Jerold Schulman's script但它会返回整个版本号,这对我来说太多了。
最佳答案
你需要把所有这些部分放在一起
访问注册表查询版本号。参见
REG QUERY/?
REG QUERY "HKLM\Software\Microsoft\Internet Explorer" /v Version
从
REG
命令返回的信息中提取包含版本的行。您可以通过管道将REG
的输出传送到FIND
命令中。请参阅帮助查找
REG ... | FIND "REG_SZ"
将结果设置到一个变量中。您可以使用
FOR/F
命令来完成。使用tokens=3
提取返回行第三个位置的版本号。另请注意转义管道字符|
所需的插入符号^
。请参阅帮助
FOR /F "tokens=3" %%a in ('REG QUERY "HKLM\Software\Microsoft\Internet Explorer" /v Version ^| FIND "REG_SZ"') DO ( SET v=%%a )
从版本字符串中提取主版本号。使用
delims=.
句号解析。请参阅帮助
。对于变量的适当扩展,您必须使用扩展扩展并使用!
语法来访问变量。此外,使用/A
将其视为数字。请参阅帮助集
FOR /F "tokens=1 delims=." %%m in ('echo !v!') do ( SET /A m=%%m )
最后,为 IE 版本添加你的逻辑
IF .!m!==.8 ( echo it's 8 ) ELSE ( ...
工作 BAT 的第一个版本必须是这样的......
@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=3" %%a in ('REG QUERY "HKLM\Software\Microsoft\Internet Explorer" /v Version ^| FIND "REG_SZ"') DO (
set v=%%a
echo !v!
FOR /F "tokens=1 delims=." %%m in ('echo !v!') do (
SET /A m=%%m
)
IF !m! EQU 8 (
echo it's 8
) ELSE (
IF !m! EQU 9 (
echo it's 9
) ELSE (
echo norrrrr
)
)
)
endlocal
关于windows - 如何从命令输出中查找和提取子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9084117/