batch-file
バッチファイルのForループ
サーチ…
構文
- / l %% p in(startNumber、increment、endNumber)のdoコマンド
- / f %% pの(ファイル名)のdoコマンド
- / f %% p in( "textStrings")doコマンド用
- / f %% p in( 'command')のdoコマンド
- / rドライブの場合:\ path %% p in(set)doコマンド
- / d %% p in(ディレクトリ)のdoコマンド
備考
for
コマンドは、 /f
フラグが使用されているときにオプションを受け入れます。使用できるオプションのリストは次のとおりです。
delims=x
トークンを区切る区切り文字skip=n
ファイルおよびテキスト文字列の先頭でスキップする行数eol=;
コメントを示す各行の先頭の文字tokens=n
処理する各行または文字列から読み取る番号付き項目usebackq
別の引用スタイルを使用します。"ファイル"内の長いファイル名には二重引用符を使用する
'textStrings'には一重引用符を使用してください
`command`にバッククォートを使用する
ファイルセット内の各行をループする
以下は、各行をC:\scripts\testFile.txt
ファイルにエコーします。空白行は処理されません。
for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
echo %%A
rem do other stuff here
)
より高度な例を示すと、検索されたコンテンツをファイルに保存しながら、制限付きファイルセットのデータからFORループでどのように派生してバッチ実行をリダイレクトすることができるのかを示します。
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir "%temp%\test*.log" /o:-d /t:w /b') do (
set "last=%temp%\%%i"
type !last! | find /n /i "Completed" >nul 2>&1 >> %temp%\Completed.log ^
&& (echo Found in log %%i & goto :end) || (echo Not found in log %%i & set "result=1"))
:: add user tasks code here
if defined result echo Performing user tasks...
:end
echo All tasks completed
exit /b
コマンド文字列が複数のコード行にどのくらいの長さに分割され、コマンドグループがかっこで区切られているかに注意してください。
ディレクトリツリーのディレクトリを再帰的に参照する
for /r
コマンドを使用すると、ディレクトリツリー内のすべてのディレクトリを再帰的に参照してコマンドを実行できます。
@echo off
rem start at the top of the tree to visit and loop though each directory
for /r %%a in (.) do (
rem enter the directory
pushd %%a
echo In directory:
cd
rem leave the directory
popd
)
ノート:
- / r - ファイルをループスルーします(サブフォルダの繰り返し)。
- pushd - 現在のディレクトリ/フォルダを変更し、POPDコマンドで使用する前のフォルダ/パスを保存します。
- popd - ディレクトリを、PUSHDコマンドによって最後に保存されたパス/フォルダに戻します。
現在のディレクトリ内のすべてのファイルの名前を変更する
次の例では、 for
ループで変数を使用してファイルの名前を変更しています。
SetLocal EnableDelayedExpansion
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename:old=new!
set filename=Prefix !filename!
set filename=!filename! Suffix
ren "%%j" "!filename!%%~xj"
)
変数名%%j
を定義し、現在のすべてのファイル(*.*)
に関連付けることで、 for
ループ内の変数を使用して、カレントディレクトリ内の各ファイルを表すことができます。
ループを通るすべての反復(またはパス)によって、定義されたグループ(同じグループであったかもしれない、例えば*.jpg
または*.txt
)とは異なるファイルが処理されます。
最初の例では、テキストを "old"というテキスト文字列に置き換えます(テキスト "old"がファイル名に存在する場合のみ)。
2番目の例では、テキストを追加します。テキスト "Prefix"がファイル名の先頭に追加されます。これは代用品ではありません。この変更は、グループ内のすべてのファイルに適用されます。
3番目の例では、再びテキストを追加します。ファイル名の末尾に「サフィックス」というテキストが追加されます。ここでも、これは代用ではありません。この変更は、グループ内のすべてのファイルに適用されます。
最後の行は実際に名前の変更を処理します。
反復
for /L %%A in (1,2,40) do echo %%A
この行は1から39まで繰り返し、毎回2ずつ増加します。
最初のパラメータ、 1
は開始番号です。
2番目のパラメータ、 2
は増分です。
第3パラメータ40
が最大値です。