1. 前提
ここで言っているファイルというのはテキストファイルを指します。
以下の項目で処理可能なのは、改行コードが「CR」「LF」であるテキストファイルのみです。
2. ファイル内の文字列を取得する
FOR /F "DELIMS=" %%A in (ファイル名) DO (ECHO %%A)
「DELIMS=」にはデリミタとして設定する文字列をいれます。
「DELIMS=」を省略するといわゆるホワイトスペースをデリミタとして解釈します。
「TOKENS=」というオプションを指定すると、デリミタで区切られた「TOKEN」の部分を取得することができます。
「TOKENS=」を指定しない場合、先頭の「TOKEN」のみ取得します。
つまり、「DELIMS」も「TOKENS」も指定しない場合、ホワイトスペースで区切られた先頭の1単語のみ取得することになります。
改行のみの行は、取得するものがないので無視されます。
3. ファイルの行数を数える
下記のバッチファイルを実行すると改行のみの行以外の行数を出力します。
@ECHO OFF
SET LINE_NUMBER=0
FOR /F %%A IN (ファイル名) DO (
SET /A LINE_NUMBER+=1
)
ECHO %LINE_NUMBER%
SET LINE_NUMBER=0
は、実はなくてもいいようです。
はじめて出現した変数の初期値は「0」に設定されているようです。
まあ、初期化はいれておく方がお行儀がよいですね。
SET /A LINE_NUMBER+=1
は、インクリメントです。
SET /A LINE_NUMBER=LINE_NUMBER+1
という書き方をしても結果は同じですが、C言語風の演算子が使えるのですね。
この場合、行数を数えるだけなので
@ECHO OFF
SET LINE_NUMBER=0
FOR /F %%A IN (ファイル名) DO (SET /A LINE_NUMBER+=1)
ECHO %LINE_NUMBER%
と書くのがよりスマートな書き方です。
4. ファイルの最終行のファイル内の文字列を取得する
下記の内容の「TEST.TXT」というファイルが存在して
AAAA BBBB CCCC DDDD
EEEE FFFF GGGG HHHH
IIII JJJJ KKKK LLLL
最終行の、「TOKEN」の1番目と3番目、つまり「IIII」、「KKKK」を取得して、変数1、変数2にいれる場合
FOR /F "TOKENS=1,3" %%A IN (TEST.TXT) DO (
SET 変数1=%%A
SET 変数2=%%B
)
と書きます。
「FOR」で読込を行う場合、特に指定しなければ、最終行まで勝手に読みこんでいきます。
「TOKEN」の1番目と3番目を変数「%%A」に入れていますが、2つ目にとった3番目の「TOKEN」は、「%%A」の次のアルファベットの変数にはいります。
すなわち「%%B」になるわけです。
この論理で行くと、変数に「%%Z」なんかは使用したくないですね。
最終行まで読みこんだ、最後の1番目と3番目の値が設定された状態で、次の処理に移行するので、結果的に最終行を取得したことになります。
数百万行もあるようなファイルは相手にできないですね。
注意しておきたいのは
FOR /F "TOKENS=1,5" %%A IN (TEST.TXT) DO (
・・・ 略 ・・・
)
とか、書いちゃうと、つい「%%A」「%%B」「%%C」「%%D」「%%E」がはいってきちゃいそうに勘違いしますが。
これではいってくるのは「%%A」と「%%B」のみで、「%%B」に5番目の「TOKEN」が入っています。
5つあって、5つともとりたい場合は
FOR /F "TOKENS=1,2,3,4,5" %%A IN (TEST.TXT) DO (
・・・ 略 ・・・
)
と全部列挙しなければなりません。
5. ファイルサイズを取得する
ファイルサイズを取得するには
FOR %%F in (ファイル名) DO SET ファイルサイズ変数=%%~zF
これで「ファイルサイズ変数」にファイルのサイズがはいります。
「%%~zF の「F」は「FOR」の後の「%%F」の「F」と連動しています。