本日は、バッチファイルの作り方シリーズとして、「for」文を紹介します。
「for」文は、もっともわかりにくいと感じます。
すべて覚えることは、難しいので、実際に使う際に、この記事を見て、やりたいことがぱっとできるような内容にしたいと思います。
For文の構文
For文は、構文を確認しましょう。
・オプションは、対象範囲を決める。ファイルやディレクトリ、サブディレクトリなどの範囲を決める。/d /r /l /f
・変数は、任意の文字です。コマンドでは%ひとつ、バッチ内ではふたつです。
・セットは、コマンドの対象となるモノ(ファイルやディレクトリ等)です。
for文のオプションの説明
オプションは、4つあります。
オプションを付けることで対象範囲を示します。
/D オプション 対象 カレントディレクトリ内のフォルダ名
/Rオプション 対象 指定したディレクトリ、サブディレクトリ内のファイル名
/Lオプション 対象 ループする値を指定
/Fオプション 対象 指定したテキストファイル内の文字列が対象
for文の実例1 /Dオプション
まずは、バッチファイルではなく、コマンドプロンプトから実行してみましょう。
dirコマンドの実行と結果です。フォルダがざっと表示されています。
この中からforコマンドで、Dから始まるフォルダを表示します。
下記を入力します。
「for /D %d in (d*) do echo %d」
Desktop,Document,Downloads,DropboxっとDからはじまる文字が表示できます。
for文の実例2 /Rオプション
次は、Rオプションです。
例えば、Cドライブ内に”.log”という名前のログファイルがどれくらいあるかfor/Rオプションで調べてみます。
「for /r %a in (*.log) do echo %a」
for文の実例3 /L オプション
次にLオプションをコマンドプロンプトから実行します。
例えば、ファイルを10個作りる場合等に使えます。
コマンドです。
「for /l %a in (1,1,10) do echo “” > test%a.txt」
for文の実例4 /F オプション
最後に/fオプションです。/fオプションは、ファイルの中身が対象になるため、まずはテキストファイルを用意します。
社員一覧表みたいなテキストファイルです。
カンマ区切りで、左から「No」、「部署」、「名前」の3列10行のテキストファイルです。
for /fオプションは、こういったテキストファイルの何列目を特定して出力するときに使います。
例えば、Noと名前だけを取り出します。
for /f ” tokens=1,3 delims=,” %i in (社員.csv) do echo %i %j
上記だとわかりにくいですが、テキストファイルに吐き出すと、ちゃんと2列だけが取得されていることがわかります。
For文を使ったバッチファイルのサンプル
for文を使ったバッチファイルのサンプルです。この例では、指定されたディレクトリ内のすべてのファイルの名前を列挙しています。
@echo off
setlocal
set target_dir=C:\Users\UserName\Documents\Example
for %%f in (%target_dir%\*) do (
echo %%~nxf
)
endlocal
setコマンドを使用して、ディレクトリのパスを指定しています。
forコマンドは、ディレクトリ内のすべてのファイルに対して繰り返し処理を行い、
echoコマンドを使用してファイル名を出力しています。
%%~nxfは、forループで処理されている現在のファイルの名前を表します。
%%~nはファイル名のみを、%%~xは拡張子を表します。
まとめ
for文について紹介しました。
今回は、すべてコマンドプロンプトから行いましたが、バッチファイルで記載する際は、変数の前に%を2つつけることを忘れずに。
また、forコマンドには状況に応じて、たくさんの使い方がありますので、調べてみましょう。
今回は、全体像の把握とすぐに使えるようにと思い、記事にさせていただきました。