[INDEX] [TOP]

バッチファイルでOSを判定する

ここでは、Windows2000/XP のコマンドプロンプト、Windows95/98/98SE/Me のDOSプロンプト上のバッチでOSを判定する方法について紹介します。

私が過去考えた方法
巷で紹介されている方法
おすすめのOS判定方法

私が過去考えた方法

当ページのリンクでも紹介している、@nifty FPCU本館が運営のDOSプロンプト活用相談室で過去私が回答したOS判定方法がこれである→発言スレッド過去ログへリンク (ご注意:この過去ログは、表示するごとに@nifty 有料会員ログインチェックが行われます。ログインをキャンセルしても閲覧できますが、会員のかたはIDとパスワードを入力してログインしていただけば、以後ブラウザを終了するまで再ログインなしで閲覧できます。)


if "%userprofile%"=="" goto LWin9X
for /f "tokens=1-3" %%i in ('ver') do set os=%%k
if "%os%"=="Version" goto LWinNT
if "%os%"=="2000" goto LWin2k
if "%os%"=="XP" goto LWinXP

このときは Win9X系とNT系の区別は %userprofile% の有無で行っていました。 今考えると、"%OS%"="Windows_NT"のほうが良かったかな。また相談者は95/98/Meの区別が必要なかったため Win9X系としてまとめて判定しています。

巷で紹介されている方法

巷とはどこかと言うと、@IT、Microsoftなどが挙げられます。

@IT〜OSの種類によってバッチ・ファイルの処理を切り替える方法
 この方法は環境変数 comspec による判断です。ざっくり 9X系 か NT系かを判断するにはシンプルでいいかも。

@echo off
if "%comspec%"=="" echo OSの種類が分かりません
if "%comspec%"=="c:¥command.com" echo MS-DOS、ないしWindows 9x系です
if "%comspec%"=="%systemroot%¥system32¥cmd.exe" echo Windows NT/2000/XP系です

マイクロソフト サポート技術情報 - 318689
 verコマンドの結果を find で検索して errorlevel で分岐しています。

次のサンプル スクリプトでは、Windows のバージョンを検出するため、ver と find が使用されます。
この方法では、VER のすべての結果に対してセクションが必要ですが、より確実な方法です。

 
@ECHO off 
SETLOCAL 

VER | find "NT" > nul 
IF not errorlevel 1 GOTO Win_NT 

VER | find "2000" > nul 
IF not errorlevel 1 GOTO Win_NT 

VER | find "XP" > nul 
IF not errorlevel 1 GOTO Win_NT 

VER | find "98" > nul 
IF not errorlevel 1 GOTO Win_9X 

VER | find "95" > nul 
IF not errorlevel 1 GOTO Win_9X 

GOTO unknown_os 

:win_NT 
call kix32.exe myscript.scr 
goto end 

:win_9X 
%0¥..¥kix.exe %0¥..¥kix32.exe myscript.scr 
goto end 

:unknown_os 
:end 


おすすめのOS判定方法

この方法は、バージョンを表示する ver コマンドの出力結果を見比べたときに思いついた方法。 参考にしたページは、Microsoftの Blaster に関する情報の "Step 1: 影響を受ける Windows か確認する" の内容。
 なんといってもif 文を使わずに判定できる点が気に入っている理由。ただし、Windows2003を犠牲にしています。2003を判定するにはif 文を使わないといけない。
 ここでは、95 / 98 / Millennium / NT / 2000 / XP を対象とすることにする。(いい訳 ^^)


echo off
REM %OS%の値 --- 95 / 98 / Millennium / NT / 2000 / XP
echo set OS=%%1> Windows.bat
echo set OS=%%2> Microsoft.bat
ver > tmp.bat
call tmp.bat
del Windows.bat
del Microsoft.bat
del tmp.bat
echo %OS%


Copyright (c) 2004-2007 じゃく
last update:2004-08-01