<GREATLY EXTENDED>このコマンドはDOS、Windows95/98/Me用とWindowsNT系用とで大きく異なっています。ご留意ください。
Windows NT/2000/XPのバッチファイル文法上の拡張機能
NT系のバッチファイル制御機能は、オリジナルのDOS、およびその系譜を引くWindows95/98/Meに比べた場合、非常に大幅な機能拡張がみられます。
このページでは、特に目だつ違いをピックアップしてご紹介します。
完璧な情報ではないので、詳細はオンラインヘルプ、あるいは付属BBSの過去ログなどで情報を得てください。
※バッチファイルの基本的な文法に詳しくない方は、DOS互換前提のバッチファイルの制御用コマンドもあわせて参照してください。
- ・( )を使ってコマンドをグループ化できます。
- 例
IF EXIST file.txt (
echo file.txtが見つかりました。
if not exist file2.txt ren file.txt file2.txt
echo file2.txtにリネームしました。
)
※( ) でグループ化されたコマンド内で環境変数を動的に変更しようとすると、思わぬ結果を生じる場合があります。
例
SET YEAR=2004
IF EXIST file.txt (
echo file.txtが見つかりました。
if not exist file2.txt ren file.txt file2.txt
echo file2.txtにリネームしました。
)
- ・256以上のERRORLEVELも利用できます
- DOSではERRORLEVELは0から255までと既定されていますが、NT系ではこの制限はなく、65535(2バイトで表現できる数字の最大値)より大きい数でも問題ないようです。
- ・IFコマンドで、「条件が偽である場合」の処理を定義する「ELSE」キーワードが使えます。
- 例
IF NOT "%1"=="" (ECHO パラメータは "%1" です。)
ELSE ECHO パラメータが指定されていません。
※1つめの処理としてECHOコマンドを指定する場合 () で囲むことが必要です。
これをしないと、ELSE以降がコマンドとしてではなく、「ECHOで表示するメッセージデータの一部」として扱われてしまいます。
- ・IFコマンドで、比較演算子が使えます。
-
EQU |
等しい |
NEQ |
等しくない |
LSS |
より小さい |
LEQ |
以下 |
GTR |
より大きい |
GEQ |
以上 |
IF "%YEAR%" NEQ "2004" (ECHO %YEAR%年) ELSE ECHO 今年
- ・IFコマンドなどから、システム変数が「環境変数」として参照できます
- NT系でのERROLEVELは、「自動設定された環境変数の値」としても参照できます。
たとえば直前に実行したコマンドがERRORLEVEL 3を返した状態では、バッチ中から「%ERRORLEVEL%」としても参照することができます。
詳細は SET /? で情報を得てください。
なお、この機能を活用する場合、下記の2例に大きな違いがあることを理解しておく必要があります。
IF ERRORLEVEL 3
数値としてのERRORLEVEL自体を上記のように参照した場合、「ERRORLEVELの数値が
3以上なら」という指定になります。一方、
IF %ERRORLEVEL%==3
……この例では、環境変数と「3」が「同じ」かどうかを比較しており、結果的に、ERRORLEVELがぴったり3の場合だけに条件が成立します。なお、
IF ERRORLEVEL EQU 3
環境変数として参照できるシステム変数 |
%CD% |
現在のディレクトリ文字列 |
%DATE% |
現在の日付(DATE と同一フォーマット) |
%TIME% |
現在の時刻(TIME コマンドと同一フォーマット) |
%RANDOM% |
0 から 32767 の間の任意の 10 進数 |
%ERRORLEVEL% |
現在の ERRORLEVEL の値 |
%CMDEXTVERSION% |
現在のコマンド プロセッサ拡張機能のバージョン番号 |
%CMDCMDLINE% |
コマンド プロセッサを起動したオリジナル コマンドラインの内容 |
上記のいずれの場合も、ユーザー自身が明示的に同じ名前の環境変数を設定した場合、上記の自動設定機能は無効になってしまう点にも注意が必要です。
- ・同一バッチファイル内にサブルーチンを置くことができます。
- CALLの機能が拡張され、
CALL :ラベル
……のかたちで、同一ファイル内の特定のラベル行を「サブルーチン」として呼び出すことができます。
※サブルーチンを終了して元の行に制御を戻すには、 "EXIT /B" コマンドを用います。
※メインルーチン終了後、サブルーチンがそのまま実行されてしまうことを避けるには、メインルーチン側でも処理の最後に"EXIT /B"を書きます。(または
GOTO :EOF)
@ECHO OFF
CALL :SUB
ECHO サブルーチンから戻ってきました。
EXIT /B
:SUB
ECHO サブルーチンが呼ばれました。
EXIT /B
- ・SHIFTコマンドに「どのパラメータ(まで)をシフトするか」が指定できます。
- (例)
[ALLCOPY.BAT]
IF %2.==. GOTO QUIT
COPY %1 %2
SHIFT /2
上記のサンプルを、
ALLCOPY C:\ABC.TXT A: B: C:
……のようにして起動すると、最初のパラメータ(%1)はシフトせず、%2に「A:」「B:」「C:」が次々に入っていきますので、結果は、
COPY C:\ABC.TXT A:
COPY C:\ABC.TXT B:
COPY C:\ABC.TXT C:
のようなコマンドが実行されることになります。
DOSVCMD! ()! ERRORLEVEL! IF! CALL! SHIFT!
●FPCU/FPCDIY QUICK LINK online●
この上の各ジャンル名をクリックすると、この下のウィンドウが切り替わります▼
=リンク集のインデックスはこちら=
|