【bat】CSVファイルを読み取って行単位で処理を行う方法|業務データの一括処理に応用

【bat】CSVファイルを読み取って行単位で処理を行う方法|業務データの一括処理に応用 bat

CSVファイルを扱う業務は多く、バッチファイルでもCSVデータを自動処理したいというニーズがあります。たとえば、顧客一覧からメールを一括送信したり、ファイル名と保存先が記載されたCSVをもとにコピー処理を行うなど、さまざまな業務に応用可能です。

この記事では、バッチファイルを使ってCSVファイルを読み取り、行ごとにデータを処理する基本構文と応用例を紹介します。

基本構文:for /f を使ってCSVを読み込む

バッチファイルでCSVを1行ずつ読み込むには for /f を使います。カンマ区切りのデータをトークンとして分割し、各値を変数に格納して処理できます。

@echo off
setlocal

for /f "tokens=1,2,3 delims=," %%A in (input.csv) do (
  echo 名前: %%A
  echo メールアドレス: %%B
  echo 電話番号: %%C
  echo.
)

endlocal

上記の例では、input.csv というファイルを読み込み、1列目を%%A、2列目を%%B、3列目を%%Cに格納しています。

CSVのサンプルデータ

田中一郎,tanaka@example.com,090-1111-2222
山田花子,yamada@example.com,080-3333-4444
佐藤健,satou@example.com,070-5555-6666

このデータを読み込むことで、各行の名前・メールアドレス・電話番号を順に処理できます。

ヘッダー行をスキップする方法

CSVファイルにヘッダーがある場合は、最初の行を読み飛ばす処理を追加します。

@echo off
setlocal enabledelayedexpansion

set "SKIP=1"
for /f "tokens=1,2,3 delims=," %%A in (input.csv) do (
  if !SKIP! EQU 1 (
    set "SKIP=0"
    rem ヘッダー行をスキップ
  ) else (
    echo 名前: %%A
    echo メール: %%B
    echo 電話: %%C
    echo.
  )
)

endlocal

enabledelayedexpansion を使うことで、ループ内で動的に変化する変数(!SKIP!)を扱えます。

読み取ったデータを使って処理を行う

たとえば、CSVに「ファイル名,コピー先ディレクトリ」という形式で記録されている場合、以下のようにしてファイルをコピーできます。

@echo off
setlocal

for /f "tokens=1,2 delims=," %%A in (copy_list.csv) do (
  echo %%A を %%B にコピーします
  copy "%%A" "%%B"
)

endlocal

これにより、業務で扱うファイル操作や移動処理などを一括で自動化できます。

注意点と実用上のポイント

  • 日本語を含むCSVは、BOM付きUTF-8やShift-JISで保存しないと文字化けすることがあります。
  • スペースやカンマがフィールド内にある場合、正しく分割されない可能性があるため、データ形式を事前に整えておくと安全です。
  • 二重引用符付きのCSV(”name”,”email”など)には対応していないため、PowerShellやPythonと併用するのも有効です。

まとめ

バッチファイルでもCSVを使ったデータ処理は可能で、特に定型的な作業に対しては非常に有効です。以下のような用途での活用が見込めます。

  • ユーザー情報の一括出力・加工
  • 複数ファイルの自動コピー・移動
  • CSVを使った設定ファイルの動的制御

より複雑な処理にはPowerShellやスクリプト言語との併用も視野に入れつつ、まずはバッチでできる範囲を活用してみましょう。