在我详细介绍之前,我想强调的是,使用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
正如您所看到的,我正在为IEVarReg变量分配reg query
输出。在不同的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命令行。
非常感谢帮助。
PS。我看过Jerold Schulman's script,但它返回的版本号对我来说太过分了。
答案 0 :(得分:6)
你需要整理所有这些作品
访问注册表以查询版本号。见REG QUERY /?
REG QUERY "HKLM\Software\Microsoft\Internet Explorer" /v Version
从REG
命令返回的信息中提取包含该版本的行。您可以将REG
的输出传递到FIND
命令。见HELP FIND
REG ... | FIND "REG_SZ"
将结果设置为变量。您可以使用FOR /F
命令执行此操作。使用tokens=3
提取返回行的第三个位置的版本号。另请注意转义管道符^
所需的插入符|
。见HELP FOR
FOR /F "tokens=3" %%a in ('REG QUERY "HKLM\Software\Microsoft\Internet Explorer" /v Version ^| FIND "REG_SZ"') DO (
SET v=%%a
)
从版本字符串中提取主版本号。在此期间使用delims=.
进行解析。见HELP FOR
。要适当扩展变量,必须使用扩展扩展并使用!
语法来访问变量。另外,使用/A
将其视为数字。见HELP SET
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
答案 1 :(得分:3)
在过去,在我完全停止使用Microsoft产品之前,我发誓从JP Software开始使用名为4DOS的产品。该公司仍然存在,他们保持了他们的产品线更新。它是商业软件,但它使DOS + Windows + OS / 2脚本变得轻而易举。 (是的,REXX不是一件轻而易举的事。)
4DOS还获得了诺顿的许可,并作为NDOS发布,与原始版本相比,它的压力更大。
也就是说,如果内存服务,你也应该能够使用SET命令来创建一个变量子串。
SET start=1
SET length=1
SET string=%IEVerReg%
CALL SET substribg=%%string:~%start%,%length%%%
我很想知道这是否有效。幸运的是,我没有Windows盒子来测试它。
答案 2 :(得分:2)
以下是对您链接的内容的略微修改似乎有效:
@echo off
setlocal
set qry=reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer" /v Version
set fnd=findstr /I /L /C:"REG_SZ"
for /f "Tokens=2*" %%u in ('%qry%^|%fnd%') do (
set vsn=%%v
)
@echo %vsn:~0,1%
endlocal