【バッチファイルについてまとめてみた④】for文の使い方
こんにちは!
ALH福岡事業所のSHUMAです!
さてさてシリーズ化している【バッチファイルについてまとめてみた】ですが、今回はその第4弾、『for文の使い方』です。
これまでの記事は下記リンクよりどうぞ!
【バッチファイルについてまとめてみた① バッチファイルとは?】
【バッチファイルについてまとめてみた② ログの出力と日付取得】
【バッチファイルについてまとめてみた③ 変数の使い方とif文】
1.はじめに
バッチファイルのfor文を習得することで、基本的な「決まった回数を繰り返す」であったり、「ファイルの中身を読み込む」、「読み込んだ特定の文字列を他の文字列に置換する」、「ファイル数をカウントする」など処理のできる幅が大きく広がると思います。
今回は、「決まった回数を繰り返す」、「ファイルの中身を読み込む」方法をご説明します。
2.決まった回数を繰り返す
決まった回数を繰り返すfor文の際には「/l」オプションが必要です。
構文
for /l %%[アルファベット1文字] in (開始値、増分、終了値) do {
処理内容
}
繰り返し.bat
@echo off
rem 開始値:1 増分:2 終了値:10 の繰り返し
for /l %%A in (1,2,10) do (
echo %%A
)
pause
上記では1~10の間で、2ずつ増加するので
出力画面には、「1 3 5 7 9」と改行区切りで表示されます。
3.ファイルの中身を読み込む
ファイルの中身を対象とした繰り返し処理には「/f」オプションをつけたfor文を使用します。
構文
for /f %%[アルファベット1文字] in (ファイル名) do {
処理内容
}
ファイル読み込み.bat
@echo off
rem 「param.txt」の中身を1行ずつ読み込む
for /f %%A in (param.txt) do (
echo %%A
)
pause
param.txt
aaa
bbb
ccc
出力画面
aaa
bbb
ccc
「param.txt」の中身を1行ずつ読み込んで表示させます。
4.少し難易度の高いファイル読み込み
読み込むファイルの中身の文字列に「スペース」が入っている場合や、カンマ区切りで作られたCSVファイルの特定の列の値を取得したい場合などの読み込み方をご紹介します。
【スペースが含まれる場合】
param.txt
aaa ddd
bbb eee
ccc fff
前述の「ファイル読み込み.bat」で上記の「param.txt」を実行すると以下のように表示され、スペースより後にある文字列は読み込まれません。
出力画面
aaa
bbb
ccc
これを回避するには、区切り文字を指定するdelimsオプションを使用します。
スペースを含む文字列の場合、delimsオプションを指定しないとデフォルトでスペースが区切り文字として認識される為、スペース以降の文字列は読み込まれません。
「"delims=○"」 ○の部分に区切り文字を指定することで、読み込む文字列に含まれる任意の記号(文字列でも可)によって文字列を区切ることが出来ます。
なので 「"delims="」 として「区切り文字指定なし」と指定することで、スペースが区切り文字として認識されずにスペースを含んだ文字列を読み込むことが出来ます。
ファイル読み込み.bat
@echo off
rem 「param.txt」の中身を1行ずつ読み込む
for /f "delims=" %%A in (param.txt) do (
echo %%A
)
pause
【カンマ区切りの文字列で特定の列の値を取得したい場合】
param.txt
aaa,ddd,123
bbb,eee,456
ccc,fff,789
カンマ区切りの文字列で特定の列の値を取得したい場合は tokensオプション を使用します。tokensオプションでは区切り文字で区切られた何番目の値を取得するのかを指定できます。
上記「param.txt」でカンマで区切られた3つめの数字の値を取得したい場合は、
「"tokens=3"」 と指定することで3つ目の値を取得することが出来ます。
ファイル読み込み.bat
@echo off
rem 「param.txt」の中身を1行ずつ読み込む
for /f "tokens=3 delims=," %%A in (param.txt) do (
echo %%A
)
pause
出力画面
123
456
789
↓ ↓ ↓ 採用サイトはこちら ↓ ↓ ↓
↓ ↓ ↓ ALHについてはこちら ↓ ↓ ↓
↓ ↓ ↓ もっとALHについて知りたい? ↓ ↓ ↓