バッチファイルのforコマンドについて基本を解説(実例あり)

スポンサーリンク

PR

仕事でバッチファイルの for コマンドを使う機会がありました。

今までは、既にコーディングされているものを参考に部分的に修正して使っていましたが、そもそも基本がわかっていなくて、やりたいことがうまくできずに困っていました。
そこで、この機会に基本を勉強するために調べてみました。

バッチファイルの for コマンドについて、調べた結果をついて解説します。

for コマンドは、バッチファイルで繰り返し処理を行うための重要なコマンドです。
以下に詳細を示します。

スポンサーリンク

基本的な構文

for コマンドの基本的な構文は次のとおりです。

for %%変数 in (ループ処理の対象) do コマンド

%%変数 は、繰り返し処理中に代入される変数です。

通常、%%i のようにアルファベット1文字を使用します。
(ループ処理の対象) には、繰り返しの対象となる条件を指定します。

 

スポンサーリンク

オプション

for コマンドにはいくつかのオプションがあります。主なものを以下に示します。
オプション無し: カレントディレクトリ内のファイルを対象にします。

/d: ディレクトリ名を対象にします。
/r: サブディレクトリまで対象にします。
/l: 指定した値で実行します。
/f: テキストファイル内の文章に対してトークンを取り出して代入します。

 

DOSコマンドのHELPを参照

初心者にはわかるずらいです

指定されたコマンドをファイル セットの各ファイルに対して実行します。

FOR %変数 IN (セット) DO コマンド [コマンドパラメーター]

%変数 単一文字の置き換え可能なパラメーターを指定します。
(セット) ファイル セットを指定します。ワイルドカードを使用できます。
コマンド 各ファイルごとに実行するコマンドを指定します。
コマンドパラメーター
指定されたコマンドのパラメーターまたはスイッチを指定します。

バッチ プログラムで FOR コマンドを使用するときは、%変数の代わりに、
%%変数を使用してください。変数名では大文字と小文字が区別されるため、
%i と %I は異なります。

コマンド拡張機能を有効にすると、次の FOR コマンドの追加形式
がサポートされるようになります:

FOR /D %変数 IN (セット) DO コマンド [コマンド パラメーター]

セットがワイルドカードを含む場合は、ファイル名ではなくディレクトリ名
の一致を指定します。

FOR /R [[ドライブ:]パス] %変数 IN (セット) DO コマンド [コマンド パラメーター]

[ドライブ:]パスから始めて、ツリーの各ディレクトリで FOR 文を実行し
ます。/R の後にディレクトリが指定されていない場合は、現在の
ディレクトリが使用されます。セットが単一のピリオド (.) である場合は、
ディレクトリ ツリーの列挙だけを行います。

 

具体例

以下は、.bat ファイル内で for コマンドを使用する例です。

@echo off
for %%i in (*.bat) do (
echo ファイル名:%%i
type %%i|more
)
pause

この例では、カレントディレクトリ内の .bat ファイルを検索し、それぞれのファイル名と中身を表示しています。

 

注意点

%%変数 は、for 文の中でだけ有効です。
大文字と小文字は別物として判断されます。

 

実例

基本を解説したところで、本来やりたかった事を実行しました。

しかし、結構てこずりました。が、苦労の甲斐あって、結果、思いどうりの動きをするようになりました。

 

やりたいこと

入力データの左端に対象フォルダの更新日時が格納されていますが、右端の日付(フォルダ名)を更新日時に日付に置き換える処理を行いたい。

例えば、1件目を例だと、フォルダの更新日時が”2024/07/10 10:20:00″となっている。

これはパソコンがフォルダを作成する際に設定された値です。

右端の日付はフォルダですが20240401となっています。

やりたいのは、右端の日付を左端の日付(/編集)に置き換えることです。

イメージとしては2024/07/10 を 2024/04/01に置き換えるイメージです。

入力データには間にスペースが格納されていますので「区切り文字」として扱われます。

いろいろと試したので、試した結果もわかるようにバッチファイルはそのまま載せます。

 

入力データ(hogehoge2.txt)

“2024/07/10 10:20:00” “Q:\ABC-LIB\LOG\LOG_M\20240401”
“2024/07/11 10:21:11” “Q:\ABC-LIB\LOG\LOG_M\20240402”
バッチファイル(sample2.bat)

copy NUL c:\work\OTFILE.txt

for /f “tokens=1,2” %%i in (hogehoge2.txt) do echo %%i %%j

for /f “tokens=1,2,3” %%i in (hogehoge2.txt) do echo %%i %%j %%k

for /f “tokens=1,2,3″ %%i in (hogehoge2.txt) do CALL :DADECNV %%i %%j %%k

PAUSE

GOTO :EOF

Rem 変換処理
:DADECNV

Rem パラメタの取得
SET A1=%1
SET B1=%2
SET C1=%3

ECHO %A1%
ECHO %B1%
ECHO %C1%

Rem フォルダ日付を取得
set YY=%B1:~22,4%
set MM=%B1:~26,2%
set DD=%B1:~28,2%

Rem 時間の取得
set TIME=%A1:~12,8%

Rem ファイルを組み立てる
SET str_temp=”%YY%/%MM%/%DD% %TIME%” %B1%

Rem ファイルを出力する
ECHO %str_temp% >>c:\work\OTFILE.txt

 

出力ファイル(OTFILE.txt)

“2024/04/01 10:20:00” “Q:\ABC-LIB\LOG\LOG_M\20240401”
“2024/04/02 10:21:11” “Q:\ABC-LIB\LOG\LOG_M\20240402”

まとめ

FOR文の解説と、実際に仕事で行いたいことの実例を紹介させていいただきました。

FOR文のお困りの方の参考になれば幸いです。

 

コメント

タイトルとURLをコピーしました