2011-01-26 106 views
1

我习惯在Linux中编写脚本,但现在我需要为Windows执行一个非常简单的脚本,它根据操作系统的版本执行某些操作。如何比较批处理脚本中的Windows版本?

我已经看到,ver命令返回的版本,但我不知道如何比较此命令的输出与字符串。

在伪代码,我只需要一个:

version = system('ver') 
if version > WINDOWS_XP_VERSION then 
    do_something(); 
end if 

或很好,现在也已经有足够的确定这样做:

version = system('ver') 
if version in [WINDOWS_VISTA_VERSION, WINDOWS_7_VERSION] then 
    do_something(); 
end if 

我主要关心的是如何比较输出一个命令。

回答

2
set Version= 
for /f "skip=1" %%v in ('wmic os get version') do if not defined Version set Version=%%v 
for /f "delims=. tokens=1-3" %%a in ("%Version%") do (
    set Version.Major=%%a 
    set Version.Minor=%%b 
    set Version.Build=%%c 
) 

set GTR_XP= 
if %Version.Major%==5 if %Version.Minor% GTR 1 set GTR_XP=1 
if %Version.Major% GTR 5 set GTR_XP=1 

if defined GTR_XP (
    ... 
) 
0
::dirty 
for /f "tokens=9 delims=Version " %v in ('ver') do set version=%v 
for /f "tokens=1 delims=]" %v in ('echo %version%') do set version=%v 
if %version% geq 5.1.2600 (echo yes) 

如果在一个批处理文件上面放,请%v前添加一个额外的%。我基于这个Wikipedia article

+0

谢谢!它几乎奏效,现在的问题是由`ver`返回的字符串取决于操作系统的语言环境配置。有什么方法可以确保脚本使用英文语言环境运行吗? (即有相当于LANG = C?)。或者...有没有什么办法从寄存器中读取版本? – 2011-01-26 20:08:24

+0

我不知道如何调整区域信息。尝试使用reg注册查询“HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion”/ v“CurrentVersion”查询注册表。 – publicRavi 2011-01-26 20:41:20