~Linux、MySQLからAJAXまでWindowsのバッチプログラミングメモwp-admin8年前Windowsのバッチプログラミングに関する情報を備忘としてメモ書きしています。※目次をクリックすると目次の下部にコンテンツが表示されます。1.システム環境変数2.複数のコマンドを実行3.引数などのバッチパラメータ4.引数内の特殊文字をエスケープ5.引数についている二重引用符を取り除く6.引数から完全パス、親ディレクトリ、ドライブ名を取得7.引数で指定したファイル名の拡張子の処理8.引数で指定したファイル名のタイムスタンプ、ファイルサイズを取得9.環境変数から文字列を抽出、置換10.遅延環境変数11.for文で代入した変数から文字列を抽出12.リダイレクトの指定13.for句、usebackqシステム環境変数Windowsのバッチファイルでよく使う主なシステム環境変数です。・%DATE%現在の日付。%DATE%2013/01/19・%errorlevel%直前に実行したコマンドのエラーコード。通常、0以外はエラー。ファイルとして認識されていません。%errorlevel%9009・%time%現在の時刻。:%910個以上ある場合は、shiftコマンドを使用する。)などの特殊文字がある場合、(^)を対象文字の前につけ、二重引用符で囲む。"a^|b"本ファイル名は、test.bat1番目の引数は、"a^&b"2番目の引数は、"^(a^)"3番目の引数は、"a^|b"引数についている二重引用符を取り除くコマンドプロンプトからバッチファイルを実行する際、引数に二重引用符(”)がついている場合、%記号と引数の数字の間に(~)を加えると取り除く事が出来る。"a^|b"本ファイル名は、test.bat1番目の引数は、a&b2番目の引数は、(a)3番目の引数は、a|b(~)をつけない場合は、下記のように二重引用符がついたまま。●ファイル名を指定した引数を完全パスに展開バッチの引数1に与えられたファイル名を完全パスに展開する場合は、%~f1と指定する。test.txtファイル名は、test.txt完全パスは、E:\batch\test.txt●ファイル名を指定した引数からドライブ名を取得バッチの引数1に与えられたファイル名からドライブ名を取得する場合は、%~d1と指定する。test.txtファイル名は、test.txtドライブ名は、E:●ファイル名を指定した引数から親ディレクトリパスを取得バッチの引数1に与えられたファイル名から親ディレクトリパスを取得する場合、%~p1と指定する。●ファイル名を指定した引数から拡張子を取り除くバッチの引数1に与えられたファイル名から拡張子を取り除いたファイル名を取得する場合、%~n1と指定する。test.txtファイル名は、test.txt拡張子なしファイル名は、test●ファイル名を指定した引数から拡張子を取得するバッチの引数1に与えられたファイル名から拡張子を取得するには、%~x1と指定する。●ファイル名を指定した引数からタイムスタンプを取得するバッチの引数1に与えられたファイル名からファイルのタイムスタンプを取得するには、%~t1と指定する。08:08●ファイル名を指定した引数からファイルサイズを取得するバッチの引数1に与えられたファイル名からファイルのファイルサイズを取得するには、%~z1と指定する。・%ver:文字列1=文字列2%変数ver内の”文字列1′′を”文字列2′′に置換。test1.bat-200○正しく処理されない理由%total%の変数は、for文が読み取られる時に一度だけ展開され、その際は、初期値の0であり、その後、ループ処理されたときには、変数が展開されないため足し合わされない。実行時に都度、環境変数を展開させるには、遅延環境変数として変数を指定する必要がある。enabledelayedexpansionを記述して遅延環境変数の展開を有効にし、変数名を”%”ではなく、”!”で囲むようにする。(”!”で囲む)を使用して文字列の抽出を行う必要があるようです。))○out1.logのファイルの中身2013/01/19,err:ファイルがありません。2013/01/20,inf:ファイルを読み込みます。2013/01/20,err:ファイルに書き込めません。○実行結果C:\batch>test.bat2013/01/20,err:ファイルに書き込めません。ハンドルはアプリケーションによって個別に定義される。上書きせずに追記で出力を書き込む●ハンドルを複製するには?アンパサンド(&)を使用し、その後にリダイレクトするハンドルの数値を続ける。