(バッチ)OSのバージョンとサービスパックの有無を調べる

バッチファイルで、Windowsのバージョンと、サービスパックの情報を取得する方法です。

幾つか方法はあるかと思いますが、Windowsのバージョンの取得判定はWindowsのバージョン毎に処理を分岐させる [コマンドプロンプト] - Diary on windを参考にさせてもらいました。
WindowServer2003以降は ver コマンドではWindowsということしかわからない様で、systeminfo コマンドを使って調べてるようです。
(しかし、systeminfoコマンドはちょいと重いのであまり使いたくはないんですよね。。)


@echo off
 
rem Windowsのバージョンチェック
SETLOCAL ENABLEEXTENSIONS
VER|FIND "NT">NUL
IF %ERRORLEVEL% EQU 0 GOTO WINNT
 
VER|FIND "2000">NUL
IF %ERRORLEVEL% EQU 0 GOTO WIN2K
 
VER|FIND "XP">NUL
IF %ERRORLEVEL% EQU 0 GOTO WINXP
 
IF NOT EXIST %SystemRoot%\System32\systeminfo.exe GOTO WARN
FOR /F "tokens=2 delims=," %%A IN ('%SystemRoot%\System32\systeminfo.exe /FO CSV /NH') DO SET osvers=%%A
 
ECHO %osvers%|FIND "Server 2003">NUL
IF %ERRORLEVEL% EQU 0 GOTO WIN2K3
 
ECHO %osvers%|FIND "Windows Vista">NUL
IF %ERRORLEVEL% EQU 0 GOTO WINVISTA
 
ECHO %osvers%|FIND "Server 2008">NUL
IF %ERRORLEVEL% EQU 0 GOTO WIN2K8
 
ECHO %osvers%|FIND "Windows 7">NUL
IF %ERRORLEVEL% EQU 0 GOTO WIN7
GOTO WARN
 
rem 各OS別の処理
:WINNT
ECHO Windows NT
GOTO :EOF
 
:WIN2K
ECHO Windows 2000
GOTO :EOF
 
:WINXP
ECHO Windows XP
GOTO SP_CHK
 
:WIN2K3
ECHO Windows 2003
GOTO SP_CHK
 
:WINVISTA
ECHO Windows Vista
GOTO SP_CHK
 
:WIN2K8
ECHO Windows 2008
GOTO SP_CHK
 
:WIN7
ECHO Windows 7
GOTO SP_CHK
 
:WARN
ECHO Unknown Windows version
GOTO SP_CHK
 
 
rem サービスパックのチェック
:SP_CHK
 
FOR /F "TOKENS=1,2,*" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CSDVersion"') DO IF "%%A"=="CSDVersion" SET SPVER=%%C
echo %SPVER%
 
 
pause


サービスパックに関しては、レジストリから取得しています。
これ以外にも、wmic os get csdversion を使う方法があります。
以下のような感じです。

set SP_NAME=
set SP=
for /F "delims=" %%v in ('wmic os get csdversion') do set SP=%%v
 
ECHO %SP%|FIND "Service Pack 1">NUL
IF %ERRORLEVEL% EQU 0 set SP_NAME=SP1
 
ECHO %SP%|FIND "Service Pack 2">NUL
IF %ERRORLEVEL% EQU 0 set SP_NAME=SP2
 
ECHO %SP%|FIND "Service Pack 3">NUL
IF %ERRORLEVEL% EQU 0 set SP_NAME=SP3



また、systeminfoからサービスパック情報も取得できますね。

IF NOT EXIST %SystemRoot%\System32\systeminfo.exe GOTO WARN
FOR /F "tokens=3 delims=," %%A IN ('%SystemRoot%\System32\systeminfo.exe /FO CSV /NH') DO SET osvers=%%A
 
echo %osvers%
 
ECHO %osvers%|FIND "Service Pack 1">NUL
IF %ERRORLEVEL% EQU 0 set SP_NAME=SP1
ECHO %osvers%|FIND "Service Pack 2">NUL
IF %ERRORLEVEL% EQU 0 set SP_NAME=SP2
ECHO %osvers%|FIND "Service Pack 3">NUL
IF %ERRORLEVEL% EQU 0 set SP_NAME=SP3
 
echo %SP_NAME%



しかし、wmic も reg query でレジストリから取得する方法も、systeminfo も XP以上出ないと使えません。
Windows2000でもサービスパックのバージョンを調べようとすると、他の手立てを取る必要があります。
(バッチじゃなくVBScriptを使ったほうが良いかもしれません)


参考:
Windows XPでSPのバージョンを確認するバッチファイルを作成し - Windows XP - 教えて!goo
バッチファイル(~.BAT)の中でXPsp2とsp3を判定する方法を教えてください。 - Yahoo!知恵袋
[PR]
by Jehoshaphat | 2013-03-23 22:22 | VBScirpt,WSH,バッチ | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/19944158
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


<< (バッチ)今のユーザが任意のグ... (バッチ)レジストリの値を取得... >>