えっ?bat引数にテキストファイルを…!?…で、できらぁ!!!
batへ引数としてテキストファイルを渡し、各行ごとにデータ解析させコマンドを動作させます。
困りごと
この記事で以下のことが解決します。
- batに複数引数を渡したい
- batを1度の起動で複数の処理をさせたい
解消方法
forというコマンドを使用することで解消できます。
forコマンドとは、ある処理を複数回(ループ)行うことができるコマンドです。
使用方法は以下の通りです。
- bat上で”for /F [“オプション”] %変数 IN (ファイル セット) DO コマンド [コマンド パラメーター]”と入力して実行

なんのこっちゃ分からへん
ですよね。このままだと説明は難しいので、次章からケースを交えて詳細な説明をしていきます。
各ケースの対応方法
batに複数引数を渡したい
インプットとなるテキストファイルに第1引数と第2引数を記載し、ファイル自体をbatに渡して実行させる場合です。
forへの引数と挙動は以下とします。
- 第1引数:移動先フォルダパス (cdコマンド実行)
- 第2引数:表示対象フォルダ (dirコマンド実行)
インプットとなるファイルはこんな感じです。
ファイル名:FileLists.csv
フォルダ構成については以下の記事を参照ください。

batの中は以下のようになっています。
ファイル名:ForToFileArg.bat
@echo off for /f "delims=, tokens=1,2" %%a in (%1) do ( @echo 移動先フォルダパス:%%a cd %%a @echo 表示対象フォルダ:%%b dir /B /S %%b @echo. ) pause
各要点は詳細は以下を参照してください。
%[数字]
batに対して渡される引数となります。
今回の例だとコマンドプロンプト上で以下のような指定となり、第1引数がbat内の処理へ渡されます。
ForToFileArg.bat [第1引数]
[“オプション”]
delims
引数として渡されたファイルの行ごとのデータの区切り文字を指定します。
今回は、インプットをcsvファイルにしたためカンマ(,)が区切り文字としています。
tokens
delimsの区切り文字で分解(split)された値の何個目を取得するかを指定します。
ちなみに個別で取得したい場合はカンマ(,)で指定し、範囲で取得した場合はハイフォン(-)を使用します。
カンマ指定の場合の例としては、
- 1個目と2個目を取得:1,2
- 3個目と4個目を5個目を取得:3,4,5
ハイフォン指定の場合の例としては、
- 1個目と2個目を取得:1-2
- 3個目と4個目を5個目を取得:3-5
%%[英語1文字]
forコマンド内では変数として扱われます。

1文字とか何の変数か分からんやん!
分かりやすい変数名を付けたいところですが、これはforコマンドとしてのルールなのでどうしようもありません(笑)
今回の例では、%1のファイルセットを%%aに格納しdelimsとtokensを指定しているので、forコマンドでは
- %a ⇒ 1個目の文字列[移動先フォルダパス]
- %b ⇒ 2個目の文字列[表示対象フォルダ]
が格納されます。

ちなみに、tokensで指定した数で英語がアップしていきます。
etc. 1個目=a、2個目=b、3個目=c
FileLists.csvをForToFileArg.batにドラッグドロップして実行結果を見てみましょう。
※コマンドプロンプト上で、”[フォルダパス]\ForToFileArg.bat [フォルダパス]\FileLists.csv”と指定して実行でもよい
といったように、cdでカレントパスへ移動し、dirで配下のパスを表示できました。
batを1度の起動で複数の処理をさせたい
複数の処理をさせる場合です。batとフォルダ構成は上記パターンと同じものを使用します。
インプットとなるファイルはこんな感じです。
ファイル名:FileLists2.csv
要は、FileLists.csvに1行追加されているだけです。
FileLists22日.csvをForToFileArg.batにドラッグドロップして実行結果を見てみましょう。
※コマンドプロンプト上で、”[フォルダパス]\ForToFileArg.bat [フォルダパス]\FileLists2.csv”と指定して実行でもよい
行ごとにループ処理がされるため、各行の引数ごとに結果が変わっているのが分かると思います。
まとめ
- forコマンドでは引数としてファイルを渡せる
- 引数として渡したファイルの行数分の処理が繰り返し実行される
- 引数として渡したファイルの中には複数の引数が指定できる
今回は分かりやすく、cdとdirコマンドを使用しましたが、mdやxcopyコマンドなどを併用すると、色んな用途に使用できると思います。
こんな使い方してるよ!といった情報をコメントを残して頂けるとworkoutがとても喜びます!
コメント メアドは任意