''コマンドプロンプトで直接コマンドを入力する時と、バッチスクリプト中で記述する場合に機能の違いについて'' #contents //////////////////////////////////////////////////////////////////////////// *%の置換 [#r86b2f74] バッチスクリプト中だと、%数字や%*は引数に置換される。また、引数でも環境変数展開でもない単独の%は空に置換される。for文の制御変数のように%の文字が必要な場合は%%と2つ連続して書く。 コマンドプロンプトでは、定義済み環境変数展開以外の%文字はそのまま残る。 //////////////////////////////////////////////////////////////////////////// *!の置換(遅延展開が有効な場合) [#pede28b7] バッチスクリプト中だと、単独の!は空に置換される。!の文字が必要な場合は^でエスケープするが、^自体も特殊文字なので^でエスケープする必要があり、つまり^^!と2個の^を前置する。 コマンドプロンプトでは、定義済み環境変数展開以外の!文字はそのまま残る。 //////////////////////////////////////////////////////////////////////////// *未定義環境変数 [#g38ccd29] コマンドプロンプトでは、書いたまま残る。 バッチスクリプト中だと、空に置換される。 (これを利用してコメントを書くのに使える。あくまで変数展開なので%や:はコメントには使えない) @echo off %ここに書いても空に置換され、無視される% //////////////////////////////////////////////////////////////////////////// *GUIアプリの起動 [#j7597bf9] コマンドプロンプトからアプリを起動した場合、 コンソールアプリの場合はアプリ終了後にプロンプトが出るのに対して、 GUIアプリの起動の場合は終了を待たずにプロンプトが出て次のコマンドが入力可能となる。 バッチスクリプト中だと、GUIアプリであってもアプリ終了後でないと 次行のコマンドが実行されない。これはWin9x系と異なる仕様だ。Win9x系のように GUIアプリの時に終了を待たずに次行のコマンドを実行するためには、 start コマンドを使う必要がある。~ 逆に、Win9x系のように完了を待ちたいGUIアプリの起動にstart /waitをいちいちつける必要は無い。 ////////////////////////////////////////////////////////////////////////////