見出し画像

【バッチファイルについてまとめてみた④】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」と改行区切りで表示されます。


この記事を書いているALHでは20代エンジニアが活躍中!
社員数1,500名を超えるメガベンチャーALHで一緒に働きませんか?

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

delims
・区切り文字を指定できる
・スペースが含まれた文字列を1行全て読み込みたい場合は "delims=" として
「区切り文字指定なし」とすると1行全て読み込むことが出来る
・カンマ区切りの文字列を読み込む際には "delims=," とカンマを指定する
・区切り文字は記号だけでなく文字列でも可

【カンマ区切りの文字列で特定の列の値を取得したい場合】

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

tokens
・区切り文字で区切られた文字列の何番目の値を取得するか指定できる
・取得する値は複数指定できる
 例)1番目と3番目の値を取得する "tokens=1,3"


この記事を書いているALHでは20代エンジニアが活躍中!
社員数1,500名を超えるメガベンチャーALHで一緒に働きませんか?




↓ ↓ ↓ 採用サイトはこちら ↓ ↓ ↓


↓ ↓ ↓ ALHについてはこちら ↓ ↓ ↓


↓ ↓ ↓ もっとALHについて知りたい? ↓ ↓ ↓




この記事が参加している募集