†バッチスクリプト中だと、%数字(~修飾子が付く場合もある)や%*は引数に置換される。引数置換でない単独の%は、次の%または:までが環境変数名とみなされる(参照:未定義環境変数)。対応する%や:の無い%は削除される。for文の制御変数のように%の文字が必要な場合は%%と2つ連続して書く。%~から数字までの間に不正な~修飾子文字があるとエラーになる。後に置換や部分文字列指定の正しい書式が無い場合は、環境変数が定義済みなら%だけが削除され、未定義なら%から:まで全体が削除される。aaaコマンドプロンプトでは、定義済み環境変数展開以外の%文字はそのまま残る。†バッチスクリプト中だと、単独の!は次の!または:までが環境変数名とみなされる(参照:未定義環境変数)。対応する!や:の無い!は削除される。!の文字が必要な場合は^でエスケープするが、^自体も特殊文字なので^でエスケープする必要があり、つまり^^!と2個の^を前置する。後に置換や部分文字列指定の正しい書式が無い場合は、環境変数が定義済みなら!だけが削除され、未定義なら!から:まで全体が削除される。†コマンドプロンプトでは、書いたまま残る。バッチスクリプト中だと、空に置換される。(これを利用してコメントを書くのに使える。%ここに書いても空に置換され、無視される%未定義環境変数に対しての文字列置換や部分文字列の展開は、%から:までのみが削除される。:で変数展開が完結するため、:に続く文字はそのまま残り、続く%は(対応する%があれば)新たに環境変数展開を始める。%に囲まれた内側と外側が逆転することになる。デフォルトで同名ファイルがあれば上書き確認メッセージが出る。デフォルトで同名ファイルがあってもメッセージを出さずに上書きする。GUIアプリの起動の場合は終了を待たずにプロンプトが出て次のコマンドが入力可能となる。次行のコマンドが実行されない。これはWin9x系と異なる仕様だ。コマンドを使う必要がある。/waitをいちいちつける必要は無い。