やりたいこと検索

ファイルから文字列を読み込む

目次

その他の関連しそうな記事

 

ファイルから文字列を読み込む

ファイルから文字列を読み込むには、「for /f」コマンドを使用します

「for」は繰り返し処理を行うコマンドですが、「for /f」はファイル内容を繰り返し読み込むというコマンドです。その他の「for」コマンドの使い方に関しては、「for(繰り返し処理) -コマンド別解説-」に詳しく解説しています。

では、以下のような「word.txt」ファイルがあったとします。

ファイルから文字列を読み込む 「word.txt」の内容

縦1列に名前が並んでいます。この中身を読むバッチファイル(read_word.bat)は以下のように書けます。

3行目の「for」コマンドで「do ( )」の中をループさせています。その際、「in ( )」の括弧内に指定したファイルの中身を1行ずつ読み込み「%%a」に代入させてループを回します。

以下、実行結果です。

ファイルから文字列を読み込む 「word.txt」の内容を読み込み表示する

 

これがファイルの内容を読み取る基本の形です。

ちなみに、「%%a」の「a」はアルファベット1文字であれば、何でも構いません。私はよく「%%i」や「%%n」を使います。

この基本形から必要に応じて、オプションを追加するなどバッチプログラムを変更していきます。

 

単語区切りで読み込む

スペース区切り

前節ではファイル内の文字列を読み込む基本の形を示しました。では、以下のような1行に複数単語書かれているファイル(words.txt)場合はどうでしょうか。

ファイルから文字列を読み込む 「words.txt」の内容

1列目に名前、2列目に年齢が書かれています。

前節と同様のバッチファイルを実行してみます。

以下、実行結果です。

ファイルから文字列を読み込む 「word.txt」の内容を読み込み表示する

はじめの1列(名前)だけしか表示されていません。

これは、「%%a」には1単語分しか入らないためです。そしてスペースまでが、1単語と認識されるため、「%%a」には初めの1列しか入りません。

 

2列目以降を取り出すには、「”token=[取り出したい列番号]”」オプションを使用します。

以下は、2列目までを取り出すように改良したバッチファイル(read_words.bat)です。

このように、「/f」と「%%a」の間に「”tokens=1,2″」を書き込みます。「1と2列目を取り出します」という指示です。すると、「%%a」に一列目(名前)、「%%b」に2列目(年齢)が入るようになります。

ここでは、「%%a」を使っていますので、2列目以下には「%%b, %%c, …」が使われますが、これが「%%i」を使っている場合だと、2列目以下は「%%j, %%k, …」となります。すなわち、列が増えるに従って、その次のアルファベットが順に対応していくのです。

以下、実行結果です。

ファイルから文字列を読み込む 「words.txt」の内容を2列目まで取り出し表示する

 

 

次は、3列のファイル(3words.txt)を読み込みます。

ファイルから文字列を読み込む 「3words.txt」の内容

3列のときも2列の場合と同様です。

単に、「tokens」に「3」を追加して、「%%c」に3列目の文字列を代入しています。

以下、実行結果です。

ファイルから文字列を読み込む 「3words.txt」の内容を3列目まで取り出し表示する

 

また、このプログラムは以下のようにも書くことができます。

「tokens=1,2,3」を「tokens=1-3」としました。このように、取り出したい列が連番になっている場合は「[数字]-[数字]」として書くこともできます。

ただし、連番ではなく1列目と3列目を取り出したい場合は、以下のように「tokens=1,3」とします。

また、3列目の文字列は「%%c」ではなく「%%b」に入ることに注意して下さい。

 

その他の文字で区切られている場合

スペース以外で列を区切られている場合は、こちらでその区切り文字を教えてやる必要があります

例えば、コンマ「,」で区切らている以下のファイル(3words_comma.txt)があるとします。

ファイルから文字列を読み込む 「3words_comma.txt」の内容

これを区切るためには、「delims=[区切り文字]」オプションで何の文字で列が区切られているかを指定します。

以下が、そのバッチファイル(read_words_comma.bat)です。

「tokens」と並べて「delims=,」を指定しコンマ「,」が区切り文字であることを教えています。画面出力は、1列目と3列目としています。

以下、実行結果です。

ファイルから文字列を読み込む コンマ区切りの文字列を読み込む

当然、コンマ以外が区切り文字である場合の使い方も同様です。「delims=[区切り文字]」オプションで[区切り文字]の部分に区切り文字となる文字情報を与えます。

 

ここで、注意したいのがこの上記のバッチファイルでは「スペース」が区切り文字として扱われていないということです。

以下のバッチファイル(read_words_comma_3words.bat)で、前節で使用したスペース区切りのファイル(3words.txt)を読み込んでみます。

「delims」では「,」としているので、コンマは区切り文字として扱われています。

分かりやすいように、各文字列の出力は縦に並べました。

以下、実行結果です。

コンマ区切り指定のバッチファイルでスペース区切りファイルを読み込む

「%%a」に1行全てが代入されてしまい、「%%b」と「%%c」には何も代入されていません(「ECHOは<OFF>です。」という表示は右の引数を指定していないときに出ます)。すなわち、区切り文字が無く1行すべてが1単語と扱われたのです。

スペースもコンマ「,」もどちらも区切り文字にしたい場合、つまり、複数の区切り文字を指定する場合は、複数の区切り文字を並べて書けばオッケーです。

以下に、コンマ「,」とスペースの二つを区切り文字としたバッチファイル「read_words_space_comma.bat」を示します。

分かりずらいですが、コンマ「,」の後にスペースが追加されています。

両方の区切り文字が使われている「3words_space_comma.txt」ファイル(下図)を対象に実行しましょう。

ファイルから文字列を読み込む 「3words_space_comma.txt」の内容

 

以下、実行結果です。

欲しい結果を得ることができました。

 

1行すべてを読み込む

区切り文字など気にせずに、1行全て読み込みたい場合を考えます。

これは、前節の「delims」オプションの応用で簡単に実現可能です。

区切りたくないといういうことは、区切り文字がないということです。したがって、「delims=」に何も指定しなければよいということになります。

以下にそのバッチファイル(read_words_no_kugiri.bat)を示します。

「delims=」だけを使用し、「=」の右には何も指定していません。

 

以下に実行結果を示します。

ファイルから文字列を読み 一行分全てを読み込む

「%%a」に1行分が全て入っていることが分かります。

 

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメント

  1. 通りすがり より:

    めちゃくちゃわかりやすいです。
    助かりました

コメントを残す