HOWTO · Batch
バッチ スクリプトで URL からファイルをダウンロードする方法
Windows バッチ スクリプトから curl を使用して、1 つのファイルまたは複数のファイルを選んだパスにダウンロードし、各転送が成功したかどうかを確認します。
このページの内容
Windows バッチ スクリプトから呼び出される実行可能ファイル curl を使用して、URL を選んだファイル名にダウンロードします。以下の例では、1 つのダウンロード、複数の URL に対するループ、および curl の終了ステータスの確認を示します。まず、コマンド プロンプトで curl --version を実行して curl が利用可能であることを確認してください。利用できるかどうかは、Windows のインストールと PATH の設定によって異なります。
curl で 1 つのファイルをダウンロードする
以下を download.bat として保存し、URL をファイルのアドレスに置き換え、必要に応じて保存先を変更します。引用符で囲まれた OUTPUT の値により、パスにスペースを含めることができます。-o オプションは、応答本文を、スクリプトを実行したディレクトリ内のそのファイルに書き込みます(または、設定した完全なパスに書き込みます)。
この例はコマンド プロンプトから実行します。転送を開始する前に curl が利用可能かどうかを確認するため、curl が PATH にないマシンでもスクリプトは正常に終了します。
@echo off
where curl >nul 2>nul
if errorlevel 1 (
echo curl is not available on PATH.
exit /b 0
)
set "URL=https://example.com/archive.zip"
set "OUTPUT=archive.zip"
curl --fail --location --output "%OUTPUT%" "%URL%"
curl is not available on PATH.
--location はリダイレクトに追従します。--fail は 404 のような HTTP エラー応答が失敗ステータスを返すようにします。これは、スクリプトが結果を確認する場合に役立ちます。スクリプトを実行する前に、サンプルの URL を実際のファイル URL に置き換えてください。
バッチ スクリプトで複数のファイルをダウンロードする
URL の短いリストについては、各アドレスと保存先ファイル名をテキスト ファイルの別々の行に保存し、バッチ ループで各行を読み取ります。これにより、URL リストにスペースが入らず、出力名が明示的になります。以下のスクリプトは、一時ディレクトリにリストを作成し、終了時にそれを削除します。サンプルの行と出力フォルダーはタスクに合わせて置き換えてください。リストを作成したり転送を開始したりする前に、curl を確認します。
@echo off
setlocal
where curl >nul 2>nul
if errorlevel 1 (
echo curl is not available on PATH.
exit /b 0
)
set "OUTPUT_DIR=downloads"
set "LIST=%TEMP%\downloads.csv"
> "%LIST%" echo report.zip,https://example.com/report.zip
>> "%LIST%" echo guide.pdf,https://example.com/guide.pdf
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
for /f "usebackq tokens=1,* delims=," %%A in ("%LIST%") do (
curl --fail --location --output "%OUTPUT_DIR%\%%A" "%%B"
if errorlevel 1 echo Failed: %%B
)
del "%LIST%"
curl is not available on PATH.
各ファイルは、リストされた名前で downloads フォルダーに保存されます。ループはカンマを使って各名前とその URL を区切るため、ファイル名にカンマを含めないでください。if not exist チェックにより、フォルダーがすでに存在する場合でもスクリプトを実行できます。
ダウンロード エラーを処理する
バッチは、最後に実行されたコマンドの終了ステータスを errorlevel に保存します。別のコマンドがそれを置き換える前に、curl の直後に確認してください。ステータスがゼロの場合は成功を示し、ゼロ以外の場合は転送の問題を示します。--fail を使用すると、HTTP エラー応答も失敗として報告されます。この例では、curl が利用できない場合に報告し、それ以外の場合は転送直後に curl のステータスを確認します。
@echo off
where curl >nul 2>nul
if errorlevel 1 (
echo curl is not available on PATH.
exit /b 0
)
set "URL=https://example.com/archive.zip"
set "OUTPUT=archive.zip"
curl --fail --location --output "%OUTPUT%" "%URL%"
if errorlevel 1 (
echo Download failed. Check the URL, connection, and HTTP response.
) else (
echo Download completed successfully: %OUTPUT%
)
curl is not available on PATH.
便利な curl オプションと Windows に関する注意点
ファイル名を選択するには --output(または -o)を使用し、サーバーがリクエストをリダイレクトする場合は --location(または -L)を使用します。curl は通常、ターミナルに転送の進行状況メーターを表示します。その表示が不要なスクリプトでは、--silent(または -s)がメーターやその他の進行状況メッセージを抑制します。エラーメッセージを表示し続けるには --show-error(-S)を追加します。出力オプションがない場合、curl は応答本文を標準出力に書き込みます。これはターミナルである場合があります。必ずしもディレクトリのソースコードが含まれるわけではありません。
コマンド プロンプトで curl が認識されないと報告される場合は、curl の実行可能ファイルをインストールするか探してスクリプトから呼び出せるようにするか、コマンドでその完全なパスを使用してください。これらの例は Windows バッチ構文とネットワーク転送を使用するため、その動作はローカルの Windows 環境、curl のインストール、およびリモート サーバーに依存します。