Programming Field

Curlでファイルを自動ダウンロードするバッチ処理 - Windowsコマンド実用例

Windows 10 以降では Curl コマンドが標準搭載されており、Web上のファイルを自動的にダウンロードするバッチ処理が簡単に実現できます。日次レポートや定期取得データの保存などに活用できます。

使用コマンド

  • Curl - HTTP/HTTPS経由でファイル取得
  • Set - 日付付きファイル名の生成
  • If - 成否判定と分岐処理

基本的なダウンロードバッチファイル

@echo off
setlocal
set URL=https://example.com/data.csv
set DATESTR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set OUTDIR=C:\Download\Data
set OUTFILE=%OUTDIR%\report_%DATESTR%.csv

if not exist "%OUTDIR%" mkdir "%OUTDIR%"

curl -L -o "%OUTFILE%" "%URL%"
if not %ERRORLEVEL%==0 (
  echo ダウンロードに失敗しました。
) else (
  echo ダウンロード完了: %OUTFILE%
)

-L はリダイレクト対応、-o は保存先指定を意味します。

補足事項

  • curl が標準で利用できるのは Windows 10(1803以降)または Windows 11 以降です。それ以外のバージョンでは別途公式サイトなどからダウンロードする必要があります。
  • 上記のバッチファイルのように、保存先フォルダを事前に作成する処理を入れておくと失敗を防げます。
  • HTTP認証が必要な場合は -u ユーザー:パスワード を付けることで認証を通すことができます。(ただしバッチファイルに直接パスワードを入れるのはセキュリティ上問題がある可能性があります。)

応用例

  • 定期実行タスクとして登録:

    Schtasks コマンド(「schtasks /create)を使えば、上記バッチを毎日決まった時間に自動実行させる(タスクを登録する)こともできます。

  • ダウンロード後にCSVファイルを加工:
    @echo off
    for /f "tokens=1,2 delims=," %%A in ("%OUTFILE%") do (
      echo %%A - %%B >> processed.txt
    )

    上記の例は、CSVファイルの各行を分割し、加工した形式で新しいファイルに出力します。

    また、「for /f "delims=" %%A in ('curl https://example.com/data.csv') do ...」などのように、For コマンドの中に Curl コマンドを入れてダウンロードしたデータをファイルに保存せずに解析することもできます。

  • 複数ファイルを一括取得:
    for %%I in (a.csv b.csv c.csv) do (
      curl -O https://example.com/%%I
    )

    -O を使うとURL末尾のファイル名をそのまま保存できます。

関連項目