バッチでOSを判定する方法(XP以前まで、それ以降は未調査)
9x系かNT系かを判断する
ざっくりと9x系かNT系かを判断します。MS-DOSでの場合も9x系と判断されます。NT系の場合、環境変数"OS"には、"Windows_NT"が定義されています。しかし、9x系の場合は環境変数の定義がされていません。これで判断します。
: REM OS判定 9x系かNT系か IF "%OS%" == "Windows_NT" GOTO OSisWinNT GOTO OSisWin9x REM Windows 9x系 :OSisWin9x ECHO Windows 9x系のDOSプロンプトです。 GOTO EOF REM Windows NT系 :OSisWinNT ECHO Windows NT系のコマンドプロンプトです。 GOTO EOF :EOF
9x系かNT系かを判断する(NT系のみで実行させる)
MS-DOSおよび9x系では、バッチファイルの拡張子は“bat”のみ。NT系では、“bat”の他に“cmd”が使える。NT系の環境のみで実行させた場合は、バッチファイルの拡張子を“cmd”とすることで実行環境を限定できる。
詳細なOS判定
VER と FIND コマンドを使用し、OSを判断します。
: REM MS-DOS Version 6.2 VER | FIND "MS-DOS" > NUL 2>&1 IF NOT ERRORLEVEL 1 GOTO OSisMsDos REM Windows 95 VER | FIND "95" > NUL 2>&1 IF NOT ERRORLEVEL 1 GOTO OSisWin95 REM Windows 98 [Version 4.10.2222] VER | FIND "NT" > NUL 2>&1 IF NOT ERRORLEVEL 1 GOTO OSisWin98 REM Windows Millennium [Version 4.90.3000] VER | FIND "Millennium" > NUL 2>&1 IF NOT ERRORLEVEL 1 GOTO OSisWinMe REM Windows NT Version 4.0 VER | FIND "NT" > NUL 2>&1 IF NOT ERRORLEVEL 1 GOTO OSisWinNT REM Microsoft Windows 2000 [Version 5.00.2195] VER | FIND "2000" > NUL 2>&1 IF NOT ERRORLEVEL 1 GOTO OSisWin2K REM Microsoft Windows XP [Version 5.1.2600] VER | FIND "XP" > NUL 2>&1 IF NOT ERRORLEVEL 1 GOTO OSisWinXP REM Microsoft Windows [Version 5.2.3790] VER | FIND "5.2." > NUL 2>&1 IF NOT ERRORLEVEL 1 GOTO OSisWinSv GOTO OSisUnknown :
MS-DOS用も書いてみましたが、FINDが使えない可能性あり
詳細なOS判定(おまけ)
バージョンを表示する VER コマンドの出力結果によってOSを判断します。
IF文を使用せずにシンプルですが、ワークファイルを作成します。また、Windows Server 2003は判断できません。
: REM OS判定 ECHO SET OSVER=MS-DOS>MsDos.bat ECHO SET OSVER=%%1>Windows.bat ECHO SET OSVER=%%2>Microsoft.bat VER>VERCHECK.BAT CALL VERCHECK.BAT DEL MsDos.bat DEL Windows.bat DEL Microsoft.bat REM 判定結果は環境変数"OSVER"に入ります。 REM セッとされる値は、MS-DOS / 95 / 98 / Millennium / NT / 2000 / XP ECHO OSは%OSVER%です。 :
でも、結局IF文で判定し直すんですよね(^^;
最終更新時間:2013年08月07日 10時01分15秒 指摘や意見などあればSandBoxのBBSへ。