1. カウンタループ
カウンタによるループの基本形は
FOR /L カウンタ IN (初期値, インクリメント値, 最大値) DO (
処理
)
になります。
カウンタ変数は「%%英字1文字」です。
ECHO OFF
FOR /L %%I IN (1, 1, 5) DO (
ECHO %%I
)
ECHO:
FOR /L %%I IN (1, 2, 5) DO (
ECHO %%I
)
というバッチファイルを実行すると以下の出力になります。
ECHO OFF
1
2
3
4
5
1
3
5
2. ファイル読み込みによるループ
ファイル読み込みによるループの基本形は
FOR /F 変数名 IN (ファイル名) DO (
処理
)
になります。
変数名は %%英字1文字 でないとまずいようです。
ECHO OFF
FOR /F %%B IN (TEST.txt) DO (
ECHO %%B
)
というバッチファイルを作成し
TEST.txt に
A
B
C
と記述して、実行すると以下の出力になります。
ECHO OFF
A
B
C
3. ファイルを1行だけ読み込むには
結論からいうと、1行だけ読み込んで break するしかないようです。
つまり
FOR /F %%変数名1 IN (ファイル名) DO (
SET 変数名2=%%変数名1
GOTO LABEL1
)
:LABEL1
4. ファイルを特定の行数だけ読み込む
ある特定の行数までファイルを読んで、それで終わりにするには、いろいろと手順が必要です。
変数を数値として扱わなければならない。インクリメントしなければならない。
ということで下記のサイトを参考にさせていただきました。
「【CMDバッチ】変数に格納した数字を数値として扱う : アルゴリズム日和」
「バッチファイルで数値を比較する」
「Windows、バッチファイル(.bat)のfor文の中で数値をインクリメントする|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~」
SAMPLE.txt というファイルから 3行だけ読み込んで表示して終了するとします。
こういう処理にします。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A MAX=3
SET /A COUNT=0
FOR /F %%B IN (SAMPLE.txt) DO (
SET LINE=%%B
ECHO !LINE!
SET /A COUNT=COUNT+1
ECHO COUNT=!COUNT!
ECHO MAX =%MAX%
IF !COUNT! GEQ %MAX% GOTO END
)
:END
SAMPLE.txt の中身を
あいうえお
ABCDE
いろはにほ
カキクケコ
FGHIJ
へとちりぬ
として、上記のバッチを実行すると、下記の結果が得られます。
あいうえお
COUNT=1
MAX =3
ABCDE
COUNT=2
MAX =3
いろはにほ
COUNT=3
MAX =3
くどくどと解説しなければならない内容なのですが・・・それはまた後日。