PC Users' Guide Forums > DOS/V&Windowsコマンド・プロンプト・リファレンス >バッチファイルの制御用コマンド 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
<THUROUGHOUT>このコマンドは、歴代のDOS/Windows(95系/NT系)全般で利用できます。
※Windows95/98/MeとWindowsNT/2000/XP/Vista系とではサポートされている機能に差がある場合もありますのでご留意ください。

バッチファイルの制御用コマンド

コマンド  機能 重要度 内部 オンライン
ヘルプ
5.0日 5.0英 Win95系 WindowsNT系
@ 現在行の画面への表示抑止
:(ラベル) ラベル
%0~%9 パラメータの参照
%環境変数名% 環境変数の参照
%%文字 バッチ・プログラム内の変数
NT ( ) 一連のコマンドをグループ化
NT && 前のコマンドが成功した場合だけ実行
NT || 前のコマンドが失敗した場合だけ実行
NT & 1行中の複数のコマンドの区切り
NT ^
(キャレット)
エスケープ文字。
……@,&,%,^などを「文字そのもの」として使用したい場合に直前につけます。
NT ; (セミコロン) パラメータの区切り
NT , (カンマ)
CALL 他のバッチ・プログラムの呼び出し
NT CALL :SUB 同一バッチファイル内サブルーチン呼び出し - - -
ECHO 画面へのメッセージ表示
NT ENDLOCAL 環境変数のローカライズを終了する
FOR..IN(..)DO 繰り返し
GOTO 分岐
IF 条件比較
NT ELSE 条件が偽である場合の処理の指定 →IF
PAUSE 処理の停止
REM コメント
NT SETLOCAL 環境変数のローカライズ - - -
SHIFT 参照パラメータの繰り上げ

関連するBBS過去ログ……バッチファイルの文法と環境変数

関連するBBS過去ログ……バッチの最小化起動


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

《バッチ・プログラムとは》

 バッチ・プログラムは1つ以上のDOS/Windowsコマンドを含むテキスト・ファイルで、テキストエディタ(Windows上の「メモ帳」など)を用いて適宜作成・編集することができます。
 たとえば、

「一連のコマンドの操作をまとめて連続的に、何度も繰返し実行したい」
「あるコマンドの実行時にいつも指定するパラメータを、あらかじめ別の短くて覚えやすい名前にまとめ、簡単に実行できるようにしたい」

 といった用途に利用でき、一連の(特に定型的な)作業のスピードアップ、安定した運用、ユーザー独自のシステムの拡張などが行なえます。

 DOSは、拡張子を.BATとしたテキストファイルを、実行可能なバッチ・プログラムであるとみなします。つまりバッチ・プログラムの拡張子は、必ず.BATでなければなりません。
※Windows NT/2000/XPでは、拡張子.CMDも用いられます。

 ファイル名は原則として任意ですが、"@"で始まる名前はおすすめできません。また、英語モードでは漢字を含むファイル名を正常に表示できないため、ファイル名に漢字を用いるのは、CHEV USSWITCHまたはUS/JPコマンドをよく使う方にはおすすめできません。

 DOSのコマンド・プロンプトで1つのコマンドを実行するためにはEnterキーを1回ずつ押す必要があるのと同じように、バッチ・プログラムでは、連続的に実行したいDOSコマンドを、(原則として)上から順に1つ1行ずつ書き入れていきます。

《 AUTOEXEC.BAT 》

 DOSの起動ドライブのルートディレクトリにAUTOEXEC.BATという名前のバッチ・プログラムがあると、DOSは、最初に起動した時点でまずこのバッチ・プログラムを自動的に実行します。
 したがって、このAUTOEXEC.BATファイルをテキストエディタなどを用いて適宜編集することで、ユーザーの利用状況にあわせ、DOSのさまざまな初期設定(PATHおよび環境変数の設定、DOSKEY、MOUSEなどの常駐プログラムの導入など)、アプリケーションの実行などを、パソコンの電源投入直後、またはシステム・リセット直後に自動的に行なわせることができます。

 Windows 95/98/Me環境でも基本的に同様で、AUTOEXEC.BATで設定した環境変数、常駐ソフトなどは、Windows上から起動したすべてのMS-DOSプロンプト上に作用します。
 Windows NT/2000/XPでは、AUTOEXEC.BATは使用されません(参照・自動始動されません)。

《バッチ・プログラム内で特殊な意味を持つ文字》

 次の文字または文字列は、バッチ・プログラム内では特殊な意味を持つものとして扱われます。

この文字をコマンドの先頭につけると、その行のコマンドを画面表示せずに実行することができます。

ECHO OFFコマンドを指定しておけば、それ以降のコマンドはすべて画面には表示されなくなります。
:文字列
 GOTOコマンドの飛び先となる「ラベル」を定義します。
 「文字列」の内容は任意で、先頭に":"をつけます。
 対応するGOTOコマンドのないラベル行は無視され、画面にも表示されません。
%0~%9
 バッチ・プログラムの起動時に指定されたパラメータ文字列を、指定された順に保持しており、バッチ・プログラム実行時に、実際のパラメータに置き換えられます。
 %0には最初はそのバッチ・プログラムの名前それ自体が記憶されています。何か1つパラメータを指定して起動した場合、そのパラメータは%1に保持されています。2つめのパラメータは%2に保持されています。以下、同様に9つめのパラメータまでが参照できます。

NT系:パラメータ参照方法の拡張
 WindowsNT/2000/XPでは、次の拡張書式で必要な情報をパラメータ文字列から抽出できます。
%1 パラメータ文字列全体
%~1 引用句 (") があればそれを削除する
%~f1 完全修飾パス名を得る
%~d1 ドライブ文字を得る
%~p1 パス名だけを得る
%~n1 ファイル名だけを得る
%~x1 拡張子だけを得る
%~s1 短い名前を得る
%~a1 ファイルの属性を得る
%~t1 ファイルのタイムスタンプを得る
%~z1 ファイルサイズを得る
%~$ENV:1 任意の環境変数名ENVに指定されているディレクトリを検索し、最初に見つかった完全修飾名を得る。
その環境変数が未定義の場合、または検索してもファイルが見つからなかった場合は空の文字列が返る。
 それぞれの修飾子は、組み合わせて使うことができます。

%~dpnx1

%環境変数名%
SETコマンド、PATHコマンドなどで設定された環境変数の実際の内容を参照するときに使います。主にIFコマンド行内で使用されます。

関連するBBS過去ログ……SET, PATH, %環境変数%

%%文字
後述するFORコマンド内で、任意のパラメータを代入するための変数として機能します。
「文字」の部分には、任意のアルファベット1文字を使用できます。

※WindowsNT系では、大文字と小文字は区別され、別の変数とみなされますので注意が必要です。

《バッチ・コマンド》

 バッチ・プログラム内には、DOSプロンプトから実行できるコマンドはすべて定義し、実行することができます。
 また、これらに加えて、バッチ・プログラムのために用意されたいくつかの特別なDOS/Windows内部コマンドがあります。これらは他の内部コマンドと同様、コマンド・プロンプトから直接実行することができますが、バッチ・プログラム以外で使用してもあまり意味のないものです。

CALL
 別のバッチ・プログラムを実行し、再び元のバッチ・プログラムに戻って、戻る直前に実行したコマンドのすぐ後の行から実行を再開します。
 あるバッチ・プログラム内から別のバッチ・プログラムを実行することは、単にそのバッチ・プログラム名をコマンド行に含めることで可能ですが、この場合は元のバッチ・プログラムの実行がその時点で終了し、新たに呼び出されたバッチ・プログラムに完全に制御が移ります。
 これに対して、CALLコマンドを使用した場合、呼び出したバッチ・プログラムが終了した時点で、また元のバッチ・プログラムを、次の行から続けて実行することができます。
 WindowsNT/2000/XPでは、同一バッチファイル内の「ラベル」もCALLで呼び出す対象として利用できます。
 この場合、EXITに /B スイッチをつけて指定することで、そのサブルーチン(またはそのバッチファイルそのもの)から脱出できます。(ラベルについては「GOTO」の項も参照してください)
  • 例3
    CALL :SUB01
    EXIT /B

    :SUB01

    ECHO サブルーチンが呼ばれました。
    EXIT /B

※次のページもあわせてご参照ください。
Windows NT/2000/XPのバッチファイル文法上の拡張機能

ECHO
画面にメッセージを表示したり、エコー機能のオン/オフを切り替えます。
ECHO OFF
以降のバッチ・コマンドの内容を画面に表示しません。(一般的には@ECHO OFFのように"@"と組み合わせて使います)
ECHO ON
以降のバッチ・コマンドの内容を、逐一画面に表示してから実行します。省略時の設定です。
ECHO
ECHOの設定が現在ONかOFFかを報告します。
ECHO 文字列
「文字列」の部分を画面に表示します。ECHO OFFの状態で、任意のメッセージを画面に表示したいときなどに使用します。
ECHO.
ECHO OFFの状態のとき、画面のカーソル位置を現在より1行下の左端に移動します。

関連するBBS過去ログ……ECHO

FOR .. IN (...) DO

 一連のファイルやディレクトリに対して、あるコマンドを連続的に実行します。指定は、次の書式で行ないます。FOR、IN、DOは省略できません。

FOR %%変数 IN (セット) DO コマンド [コマンドのパラメーター]
%%変数
 このコマンド内で使う一時的な文字変数の名前を、任意のアルファベット1文字で指定します。
 この変数は、あとの コマンド [コマンドのパラメーター] の部分に、任意の回数分指定することで、変数に代入されている内容そのものを参照することができます。
 なお、バッチ・プログラムからではなくコマンド・プロンプトからFORコマンドを直接実行する場合には、"%"記号が1つ少ない、 %変数 の形式で指定します。
※WindowsNT/2000/XPでは大文字・小文字は区別され、たとえば %%A と %%a は別の変数とみなされます。
(セット)
 「%%変数」に実際に代入する個々の文字列の集合を指定します。
 複数の文字列は、間に1つ以上のスペースを入れて区切ります。
 また、グローバル・ファイル文字を使用することによって、複数のファイル名を一括して指定することもできます。

※WindowsNT/2000/XPでは、「テキストファイルの内容やコマンドの実行結果メッセージを変数に取り込む」といったことも可能です。詳細は オンラインヘルプ(FOR /?など) でご確認ください。
コマンド
 (セット)に指定した各要素の数と同じ回数だけ繰返したいコマンドを指定します。
 %%変数自体をこの位置に指定することもでき、この場合はコマンドの一部または全部が、(セット)で指定した文字またはファイル名集合のそれぞれ1つずつに変換されます。

コマンドのパラメーター
繰返し実行したいコマンドに、起動パラメータの指定が必要である場合にそれを指定します。%%変数自体をこの位置に指定することもでき、この場合はパラメーターの一部または全部が、(セット)で指定した文字またはファイル名集合のそれぞれ1つずつに変換されます。
WindowsNT/2000/XPでは、 FOR .. IN (...) DO は次のコマンド形式に拡張されています。
FOR [スイッチ [オプション]] %%変数 IN (セット) DO コマンド [コマンドのパラメーター]
/D
指定したセットがワイルドカードを含む場合に、それがディレクトリ名であることを指示します。
/R [[ドライブ:]パス]
サブディレクトリを再帰的に検索し、該当するすべてのディレクトリでFOR 文が実行されます。
/L
セットが数値であることを宣言します。
 この場合、セットは「開始値、ステップ、終了値」の形式で指定します。たとえば、
 FOR /L %%I IN (101,1,200) DO ....
 と指定した場合、変数 %%I は101から始まって200まで1ずつ増えていきます。
 FOR /L %%I IN (16,-1,0) DO ....
 と指定した場合、変数 %%I は16から始まって0まで1ずつ減っていきます。
/F ["オプション"]
セットが(テキスト)ファイル名であることを指示します。
この場合のFORコマンドは、指定されたファイルの各行に対してコマンドを実行します。


FOR /F %%I IN (ABC.TXT) DO ECHO %%I & PAUSE

※読み取られた各行の内容は、区切り文字(既定では半角スペース)によって分離されて、変数に格納されます。
 たとえば、読み取ったABC.TXTの1行めが次の内容であった場合、%%I には WELCOME が格納されます。
 WELCOME TO FPCU
 また、残りの2単語(トークン)は、暗黙に宣言された(とみなされる)下記の2つの変数に格納されます。
 %%J …… TO
  %%K …… FPCU

※変数名が %%J と%%K なのは、もとのFORコマンドでユーザーが宣言した変数名が %%I だからです。
FOR /F %%A IN (ABC.TXT) DO ECHO %%I
 ……のように、宣言された変数が%%Aであれば、2単語めは%%B、3単語めは%%Cに格納されます。

※「テキストファイルの最初のn行を飛ばし読みしたい」
「CSV形式のファイルを処理するため、語の区切り文字を" "ではなく","にしたい」
 などなど、細かい活用のためのオプションも提供されています。
変数参照方法の拡張
「%%変数」からは、次の拡張書式で必要な情報を抽出できます。
%%~A 引用句 (") があればそれを削除する
%%~fA 完全修飾パス名を得る
%%~dA ドライブ文字を得る
%%~pA パス名だけを得る
%%~nA ファイル名だけを得る
%%~xA 拡張子だけを得る
%%~sA 短い名前を得る
%%~aA ファイルの属性を得る
%%~tA ファイルのタイムスタンプを得る
%%~zA ファイルサイズを得る
%%~$ENV:A 任意の環境変数名ENVに指定されているディレクトリを検索し、最初に見つかった完全修飾名を得る。
その環境変数が未定義の場合、または検索してもファイルが見つからなかった場合は空の文字列が返る。
より詳細な情報は オンラインヘルプ(FOR /?など) で得てください。

関連するBBS過去ログ……FOR .. IN ( ) DO..

関連するBBS過去ログ……FOR /F

関連するBBS過去ログ……遅延環境変数の展開

関連するBBS過去ログ……文字列の操作

GOTO ラベル
 バッチ・プログラム中の、「ラベル」で定義された別の場所に移動して、そこから処理を続行します。
 通常、IFコマンド等との併用によって、バッチファイル内で条件分岐を行ないたいときに使用します。
 移動先の「ラベル」は、最初の1文字に":"、そのあとに任意の文字列を指定することで宣言できます。
 また、GOTOコマンドより前の行にあっても後の行にあっても構いませんが、現在行より前の行への移動を指示する場合には、無限の繰り返しになっていないかどうかを充分に確認してから実行してください。  上の例では、4行めまでのコマンドが実行された後、無条件に1行めの「LOOP」というラベルに戻って処理を続行するようになっています。このようなバッチ・プログラムは、途中でバッチ・プログラム自体の実行を中止するための特別な手段を用いないと、無限に同じコマンドが繰り返されることとなります。
 ここではPAUSEコマンドで一旦実行が停止し、キーが何か押されるまで待つようになっています。
 この場合には、PAUSEにより停止している状態でCtrl+Pause(Break)キーを押すことで、バッチ・プログラム自体の実行を停止させることが可能です。
 しかし、もしこのPAUSEコマンドが定義されていなかったなら、このバッチ・プログラムを終了させる手段はないことになります。

 WindowsNT/2000/XPでは、コマンド拡張機能が有効な場合(デフォルトで有効ですが)、あらかじめ暗黙に定義された「ファイル末尾」を意味するラベル :EOF が利用できます。

  • CALL :SUB01
    GOTO :EOF

    :SUB01

    ECHO サブルーチンが呼ばれました。
    EXIT /B


IF [NOT] 条件 コマンド [パラメーター]
※IF コマンドは、WindowsNT/2000/XPでは多数の拡張機能を持っています。次のページもあわせてご参照ください。Windows NT/2000/XPのバッチファイル文法上の拡張機能

関連するBBS過去ログ……IF(結果の検査、条件分岐)



 ある条件が成立するときだけコマンドを実行します。NOTが指定されているときにはその逆に、条件が成立しないときだけコマンドを実行します。
 「条件」の部分には、次の3つの書式が使えます。
  IF ERRORLEVEL 数値
  IF 文字列==文字列
  IF EXIST ファイル名
≪条件書式1≫ ERRORLEVEL 数値
IFより前に実行されたプログラムが、指定した「数値」以上の「終了コード」をDOSに返しているときに、条件が成立します。

※返される値は、オリジナルのDOSでは0~255までの10進数ですが、WindowsNT系ではもっと大きな数値の場合があります。

 たとえばBACKUPコマンドは、「バックアップすべきファイルが見つからない」エラーが発生した場合、終了コードとして1を返します。
 この終了コードを取得したい場合、たとえば次のようにします。
  • 終了コード取得例
    BACKUP C: D: /S /M
    IF ERRORLEVEL 2 GOTO OTHERERROR
     2以上ならOTHERERRORに飛ばす。
    IF ERRORLEVEL 1 GOTO NOTFOUND  1(以上)ならNOTFOUNDに飛ばす。
    ECHO バックアップが正常終了しました。
    GOTO END
    :NOTFOUND
    ECHO バックアップすべきファイルが見つかりませんでした。
    GOTO END
    :OTHERERROR
    ECHO BACKUPがエラーを返して終了しました。
    :END

※すべてのコマンドがあらゆる状況下でしかるべき終了コードを返すわけではありません。
 エラーが起きても何も終了コードを返さないコマンド/プログラムも存在することに注意してください。
 WindowsNT/2000/XPでは、
EXIT /B 終了コード
 の形式のコマンドを使うことで、バッチファイルの終了時に任意の終了コードを返させることができます。
 詳細はEXITのページをご覧ください。
 WindowsNT/2000/XPでは、 ERRORLEVELは環境変数 ERRORLEVEL にも自動的にセットされます。この「環境変数ERRORLEVEL」を参照する場合は、この下の「文字列==文字列」のかたちで行います。

<例>IF %ERRORLEVEL%==1 GOTO QUIT

※この書式は「文字としての比較」になるため、上の例でいえば「ERRORLEVELが1の場合」だけ成立し、2以上の場合と0の場合は不成立になる点に注意してください。

関連するBBS過去ログ……ERRORLEVEL


≪条件書式2≫ 文字列1==文字列2
 2つの文字列がまったく同じであった場合に条件が成立します。等号は、必ず "==" と2つ並べて指定します。
 2つの文字列には、バッチファイルに与えられた起動パラメータを示す記号(%1、%2など)でも構いません。また、環境変数名も、 %TEMP% というように、左右両片に"%"をつけることで、その実際の内容を検査することができます。
 なお、こうした変数を比較する場合、代入されるべき文字列が空だったときはIFコマンドの構文の誤りと解釈されてしまう可能性があります。
  • よくない例
    IF %1==ABC GOTO LABEL01
    →%1が空文字だった場合、次のような(文法的に誤った)コマンドが指定されたことになり、エラーが発生します。
    IF ==ABC GOTO LABEL01
 このため通常、文字列1、文字列2の双方に、まったく同じ1字以上の文字を最初から指定しておくのが安全です。
  • 例1
    IF %1.==. GOTO NOPARAM
    ECHO 現在、パラメータとして"%1"が指定されています。
    GOTO END
    :NOPARAM
    ECHO 現在、パラメータが指定されていません。
    :END


     ……この例では、パラメータが指定されていなかった場合、比較式の左辺、右辺ともに「.」(ピリオド)となり、結果は真となって、ラベル :NOPARAM から先が実行されます。

  • 例2
    IF "%SYS%"=="C:" ECHO システムディスクはC:です。

     ……この例では、「SYS」という環境変数が実在していない可能性があるため、左辺が単に %SYS% と指定されていた場合には、エラーが発生することとなります。"%SYS%"と引用符号を左右につけることで、このエラーを防いでいます。

≪条件書式3≫ EXIST ファイル名
指定された名前のファイル名が実在するときに条件が成立します。ファイル名には、グローバル・ファイル名指定を使用することができます。
特殊な用法として、ディレクトリの実在をチェックする次のような方法があります。標準出力デバイス名"CON"は、どのディレクトリ名をつけても、そのディレクトリが実在する限り、オープン可能なファイル名として扱われるからです。

  • IF EXIST C:\DOS\CON ECHO C:\DOSは実在します。

コマンド [パラメーター]
この部分には、すでにあげた例のように、任意のコマンドと、そのコマンドが必要とするパラメーターを指定します。

※IF コマンドは、WindowsNT/2000/XPでは多数の拡張機能を持っています。次のページもあわせてご参照ください。Windows NT/2000/XPのバッチファイル文法上の拡張機能

関連するBBS過去ログ……EXIST


PAUSE [メッセージ]
 バッチ・プログラムの実行を中断して、キーが何か押されるまで待ちます。
 このときBreakキー(Ctrl+Pause、またはCtrl+C)を押すと、

バッチ処理を終了させますか(Y/N)?

 というメッセージが表示されます。ここでYキーを押すと、現在実行中のバッチ・プログラムを強制的に終了させることができます。
[メッセージ]
PAUSEは、実行時に与えられたパラメーターに何の影響も受けませんが、DOSがECHO ON の状態で動作しているとき、この形式でバッチファイルに指定された文字列は画面にそのまま表示されるため、コメント等のメッセージをこの位置に含めることができます。

関連するBBS過去ログ……PAUSE,CHOICE…キー入力待ち/時間待ち

REM [コメント]
 バッチ・プログラム内に、命令以外の任意のコメントを書き込みたいときに使用します。
 "REM"(Remarkの略)の文字は、行の(スペース、タブなどの区切り文字を除いた)最初の文字列でなければなりません。
 この"REM"以下に書かれた文字列を、DOSはコマンドとして解釈実行しません。
 また、ECHO OFFの状態では、コメント内容は画面に表示されません。

SHIFT
 バッチ・プログラム始動時に与えられたパラメータ%0~%9の順序を、1つずつ繰り上げます。もとの%0にあった内容は捨てられます。
 また、9つより多いパラメータが指定されているとき、それらはSHIFTコマンドによって順次%9に収められることとなります。
※WindowsNT/2000/XPでは、「n番目以降のパラメータだけを順次参照」といったことも可能です。
次のページもあわせてご参照ください。
Windows NT/2000/XPのバッチファイル文法上の拡張機能
《関連コマンド/関連ページ》
Windows NT/2000/XPのバッチファイル文法上の拡張機能
SET 環境変数の設定と表示
START 新しいウィンドウを開いてコマンドを実行

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

DOSVCMD! BATCH!

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


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