Programming Field

「( )」 (括弧(グループ化)) - DOS/コマンドプロンプト コマンド一覧

[Windows NT 系] 複数の行に記述されたそれぞれのコマンドをまとめるときに使用します。

構文

(
    <command-1>
    <command-2>
      .
      .
      .
)
<command-1>, <command-2>, ...

任意のコマンドを指定します。1行に1コマンド(コマンドブロック)を指定します。( )をさらに記述することもできます。

なお、インデントは任意です。

解説

「( )」使用例1 「( )」使用例2

IfForのように任意のコマンドを指定できる場合、( )を用いることで複数行に分けたコマンドを1つの「コマンドブロック」としてあたかも1行のコマンドであるかのようにすることができます。If以外にも、「||」「&」などの、構文の一部にコマンドラインを必要とする箇所で使用することができます。

※ 「コマンドラインを受け付ける構文」であっても、それを処理するプログラムがForfilesなどの外部コマンドである場合は利用できません。あくまでもcmd.exeが直接処理する組み込みコマンドでの利用に限られます。

また、( )の閉じ括弧はコマンドブロックの終了文字として見なされます。これは組み込みコマンドを利用する際に重要であり、組み込みコマンドの「改行文字またはブロックの終了までをコマンド全体として解釈する」という仕様に基づいてブロックの終了を明示したいときに「( )」を用いることができます。例えば「If <compare> ... Else ...」を1行で記述する場合はElseの前のコマンドラインは( )で括る必要があります。

なお、( )全体の終了コードは最後に実行したコマンドの終了コードになります。

注意点として、( )内に「%」が存在した場合は、「%」による環境変数の展開が( )内の各コマンドを実行する前に先に行われます。各コマンド実行時に環境変数を展開したい場合はSetlocal「!」の使用を検討してください。

サンプル1

if "%MYVAR%"=="Hello" (
    echo Hoge
    echo Piyo
)

環境変数「MYVAR」が「Hello」のとき、画面には「Hoge」と「Piyo」が1行ずつ出力されます。

サンプル2

foo.exe || (
    cleanfoo.exe
    echo Failed.
)

「foo.exe」が0以外の終了コードを返した場合(失敗したときなど)、「cleanfoo.exe」を実行して「Failed.」と画面に出力します。「||」により、「foo.exe」が終了コード0を返した場合は「cleanfoo.exe」は実行されず、「Failed.」も出力されません。

サンプル3

(
    echo Do something...
    prepareSomething.exe
) && doSomething.exe

画面に「Do something...」を表示してから「prepareSomething.exe」を実行し、このプログラムが終了コード0を返した場合(成功したときなど)にのみ「doSomething.exe」を実行します。「&&」により、「prepareSomething.exe」が0以外の終了コードを返した場合は「doSomething.exe」は実行されません。

なお、この例でEchoの行と「prepareSomething.exe」の行を入れ替えた場合は常に「doSomething.exe」が実行されます(ERRORLEVELの値は0以外にもかかわらずEchoは終了コード0の扱いになります)。

サンプル4 (バッチファイル)

setlocal enabledelayedexpansion
if exist "%~f1%~2" (
    set "OUTFILE=%~f1%~n2.out"
    myparse.exe "%~f1%~2" "!OUTFILE!"
)

[拡張機能] ( )内で環境変数を設定してその値を使用するため、環境変数の遅延展開機能を用い、「%」ではなく「!」を使って変数の値を取り出しています。