PC Users' Guide Forums > DOS/V&Windowsコマンド・プロンプト・リファレンス >Windows NT/2000/XPのバッチファイル文法上の拡張機能 dos/vコマンド・リファレンス
TOP | ジャンル別一覧 | アルファベット順索引 掲示板[コマンド・プロンプト活用相談] | 参考書  
http://fpcu.on.coocan.jp : PC Users' Guide Forums (FPCU)
サイト内/WEBを検索:
Web fpcu.on.coocan.jp
【連携サイト】東京エキストラNOTES:全国エキストラ募集情報が集結。
DOS/Windowsコマンド・リファレンス | Q&A PC用語 PC史 書籍情報
SONY VAIO ブラウザ(Firefox,Opera.). イエローページ 製品情報-2005 |-2003
PC-DIY Forum PC自作なんでも相談室 フリートーク PCパーツ里親募集
FPCUのPCユーザー交流スペースは新コミュニティ「folomy」内にあります。
質問、交流などお気軽にどうぞ(参加無料)…FPCU会議室TOP | VAIO | FPCDIY
<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:
  のようなコマンドが実行されることになります。

<トップ> <凡例>
<ジャンル別INDEX> <50音順INDEX>
掲示板[DOSプロンプト活用相談]
<FPCU TOP>

DOSVCMD! ()! ERRORLEVEL! IF! CALL! SHIFT!


<トップ> <凡例>
<ジャンル別INDEX> <50音順INDEX>
掲示板[DOSプロンプト活用相談]
<FPCU TOP>

DOSVCMD! BATCH_NT!

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、この下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=