2014-09-01 28 views

回答

2

這樣的事情就足夠了。

ver | findstr /i /c:"Version 6.3" >nul && goto :set_win81 

下面是一些代碼,我已經squirreled離開這個任務:

@echo off 
set "windows=" 
VER | find " 4.1." > nul && set windows=W98 
VER | find " 4.0." > nul && set windows=NT 
VER | find " 5.0." > nul && set windows=W2K 
VER | find " 5.1." > nul && set windows=XP 
VER | find " 5.2." > nul && set windows=XP 64-Bit or Server 2003 or Server 2003 R2 
VER | find " 6.0." > nul && set windows=Vista or server 2008 
VER | find " 6.1." > nul && set windows=Win7 or server 2008 R2 
VER | find " 6.2." > nul && set windows=Windows 8 
VER | find " 6.3." > nul && set windows=Server 2012 R2 or Windows 8.1 
if defined windows (
echo %windows% 
) else (
echo unknown operating system 
) 
pause 
+0

Windows版本值是:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx – Tomalak 2014-09-01 15:13:37

+0

@Tomalak謝謝,代碼更新 – foxidrive 2014-09-01 15:21:15

+0

你的第一個代碼示例也是一個錯誤。應該看起來像你的第二個樣本中的行。 – Tomalak 2014-09-01 15:28:55

2

作爲替代解析的ver輸出,你可以使用註冊表:

setlocal 

set reg_info=reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentVersion 
for /f "skip=2 tokens=3" %%l in ('%reg_info%') do set win_ver=%%l 

if "%win_ver%" equ "6.2" goto :set_win80 
if "%win_ver%" equ "6.3" goto :set_win81 

REM etc etc 

的關鍵點在於,您可以使用for /f循環以及幾個設置來解析多行多列數據,如reg query的輸出。

+1

您的for循環變量在批處理文件的'%l'上需要額外的百分比。 – foxidrive 2014-09-01 15:56:47

+0

絕對。修正了。 – Tomalak 2014-09-01 16:12:52

1
@echo off 
setlocal 
:: Get windows Version numbers 
set ver="" 
set con="Microsoft Windows Version 6.3" 
for /f "tokens=2 delims=[]" %%G in ('ver') do set ver=%%G 
echo found version %ver% 
if %%ver EQU %%con (
goto set_win81) 

echo NO win81 
exit/B 

:set_win81 
echo win81 
exit/B