DOSのメモ †DOSでちょっと困ったときのメモです。 ループ処理 †配列によるループ †forを使用する場合コマンドラインで直接実行する場合変数に%を1つだけ付けますがバッチファイルの場合%を2つ付けます。 for %n in ( 1 3 5 7 9) do (コマンド %n) バッチファイルの場合 set CMD=コマンド for %%n in ( 1 3 5 7 9) do ( %CMD% %%n ) ファイルによるループ †バッチファイルで実行する場合 set CMD=コマンド set PATH=src for %%f in ("%PATH%\*.c") do ( %CMD% %%f ) ここで%%fの値はsrc\test.cというようにフォルダー名がついています。 再帰削除 †ファイルの削除 †フォルダー下の同じフィル名のファイルを削除します。 del /F /S /Q ファイル名 /F 読み取り専用ファイルを強制的に削除します。 /S 指定されたファイルをすべてのサブディレクトリから削除します。 /Q ワイルドカードを使用して一括削除するときに、確認のメッセージ を表示しません。(QUIET モード) フォルダーの削除 †フォルダー下の同じフォルダー名のフォルダーを削除します。 for /R %d in (.svn) do rmdir /S /Q "%d" /S 指定されたディレクトリに加えて、そのディレクトリ内のすべての ディレクトリとファイルを削除します。ディレクトリ ツリーを削除 するときに使用します。 /Q /S を指定してディレクトリ ツリーを削除するときに、確認の メッセージを表示しません。(QUIET モード) ファイル名の取得 †バッチファイルの中でファイル名などを取得する方法 ここで%0がバッチファイル名です。別の変数にファイル名をセットして同様の処理をすることができます。以下はC:\work\test.batをC:\work\で実行した場合です。 %0 : バッチファイル名(test.bat) %~f0 : フルパスのファイル名(C:\work\test.bat) %~d0 : 現在のドライブ名(C:) %~p0 : 現在のドライブ名を除いたフォルダー名(\work\) %~n0 : 拡張子を除いたファイル名(test) %~x0 : 拡張子(.bat) %~nx0: フォルダー名を除いたファイル名。上記nとxの複合。(test.bat) 特殊文字 †%は特殊な文字なので、バッチ内でパラメータ等で使用する場合は「%%」とします。 処理後のファイル名の拡張子の変更 †以下はsrcフォルダー下にある拡張子がcのファイルをlogフォルダー下に拡張子をlogに変更してコピーするバッチのサンプルです。 @echo off set DRIVE_PATH=%~d0 set CUR_PATH=%~p0 set CMD=copy set SRC_PATH=%DRIVE_PATH%\%CUR_PATH%\src set LOG_PATH=%DRIVE_PATH%\%CUR_PATH%\log for %%f in ("%SRC_PATH%\*.c") do ( %CMD% %%f %LOG_PATH%\%%~nf.log ) ファイルの結合 †copy A+B C 但し、コピー後のファイルCが1バイト多くなります。つまりAが5バイトBが5バイトの場合Cは11バイトになります。 copy *.csv abc.txt ![]() ![]() Last-modified: 2016-07-19 (火) 19:39:59 (3169d)
|