1
1

More than 1 year has passed since last update.

【Windowsバッチ】テキストファイルの内容を1行ずつ読み込む方法

Last updated at Posted at 2023-07-16

■目的
テキストファイルを開きコピペして書き込むのは面倒な場合、自動的に出力できる方法の1つとして「Windowsバッチ」を使う方法をメモとして残します。
なお、主に以下の内容を知りたい方を対象としています。
'-----------------------------------------
・Winodwsバッチファイルでファイル内容を1行ずつ読み込みたい方
・「for」コマンドを使ったファイル内容の読み込み方法をしりたい方
・スペースを含んだファイルから自在に内容を読み込みたい方
'-----------------------------------------

■参考にしたURL
https://jj-blues.com/cms/wantto-readfilelinewithfor/

■前提条件
読み込むファイルは「テキストファイル形式」とします(例, .txt、.csvなど)。
そのため、wordやExcelなど上記以外の形式はこの記事の対象ではありません。

■記事に記載する内容
①ファイル内容を1行ずつ読み込む
②スペースを含む場合のファイル内容を読み込み方
③任意の列の文字列を読み込み出力する
④区切り文字を指定する

①ファイル内容を1行ずつ読み込む
(1)コードサンプル

@echo off
rem ファイルを1行ずつ読み込む
for /f %%[アルファベット1文字] in ([読み込むファイル]) do (

  rem 出力する
  [繰り返したい処理]

  rem 見やすいように区切りを出力する
  echo ---

)

このままだと動かないので以下のように変える。
%%[アルファベット1文字] → %%a
[読み込むファイル] → C:\tmp\4\テスト1_1行ずつ読み込む.txt
[繰り返したい処理] → echo %%a

(2)実際に読み込むファイル
C:\tmp\4\テスト1_1行ずつ読み込む.txt
image.png

(3)実行してみる
・(1)のサンプルコードをバッチファイル(read_textfile.bat)として保存する
・コマンドプロンプトを起動しバッチファイルを起動する
image.png

②スペースを含む場合のファイル内容を読み込み方
(1)コードサンプル

@echo off
 
rem スペースを含むテキストファイルを1行ずつ読み込む
for /f "delims=" %%a in ([読み込むファイル]) do (
  rem 出力
  echo %%a
 
  rem 区切りを挿入
  echo ---
)

(2)ポイント
「delims」オプションをつけて「”delims=”」とすること
→理由
・スペースがある場合、その位置で一区切りと判断され「%%a」にははじめのスペースまでの文字列しか代入されないため
⇒結果は以下の通り

・出力結果
image.png
・実行したバッチファイル
image.png

・そのため、スペースを区切りとせず一行全体を読み込んで表示させたい場合には、「for」コマンドに「delims」オプションをつける必要がある

(2)実際に読み込むファイル
C:\tmp\4\テスト2_スペースを含むファイルを読み込む.txt
内容はメニューと価格をリスト化したもので、半角スペースで区切っている
image.png

(3)実行してみる
・(1)のサンプルコードをバッチファイル(read_textfile_includeSpace.bat)として保存する
・コマンドプロンプトを起動しバッチファイルを起動する
image.png

③任意の列の文字列を読み込み出力する
④区切り文字を指定する

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1