2011-01-26 66 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