Y子です。
今日は、ファイルをダウンロードしてみます。HTTPリクエストってやつです。
#概要・用途・注意
決まったURLのファイルをダウンロードするバッチファイルです。
http://example.jp/daily_data.csv
を、 savefile.csv
という名前で保存してみます。
たとえば、__「毎日更新されるファイルをダウンロードして上書きし、業務に使う」__なんて場合を想定しています。
「curl
」というコマンドを使いますが、これはWindows 10のRS3(2018年)から標準で付属しているようです。(参考)
#コード
###(1) シンプルな例
単純に、ダウンロードして保存します。
@echo off
rem ダウンロードしたいファイルのURL
set str_url="http://example.jp/daily_data.csv"
rem 保存するファイル名
set str_savefile=savefile.csv
rem ダウンロード実行
curl %str_url% > %str_savefile%
pause
###(2) プロキシを考慮した例
社内ネットワークなど、認証が必要なプロキシがある場合はこちら。
@echo off
rem ダウンロードしたいファイルのURL
set str_url="http://example.jp/daily_data.csv"
rem 保存するファイル名
set str_savefile=savefile.csv
rem プロキシのユーザ名、パスワード、サーバ名、ポート番号
set pid=username
set ppw=password
set psv=proxy.example.jp
set ppt=8080
rem ダウンロード実行(プロキシ考慮)
curl %str_url% -x http://%pid%:%ppw%@%psv%:%ppt% > %str_savefile%
pause
###(3) ダウンロード成否を判定する例
ダウンロードに失敗する可能性がある場合を考慮します。
失敗データ(空ファイル)を、既存のファイルに上書きしてしまうと悲しいですので…。
ダウンロードしたものをいったん一時ファイルとして保存し、空でなければ採用する、という2段構えにしました。
@echo off
rem ダウンロードしたいファイルのURL
set str_url="http://example.jp/daily_data.csv"
rem 一時保存するファイル名
set str_tmpfile=tmpfile.csv
rem 保存するファイル名
set str_savefile=savefile.csv
rem ダウンロード実行(一時保存)
curl %str_url% > %str_tmpfile%
rem 一時保存ファイルのサイズを取得するおまじない
for %%i in (%str_tmpfile%) do set size=%%~zi
rem ダウンロード失敗の場合(空ファイルの場合)
if %size%==0 (
rem 一時保存ファイルを削除
del %str_tmpfile%
echo ×失敗×
rem ダウンロード成功の場合
) else (
rem 古い保存ファイルがあったら消す
if exist %str_savefile% (
del %str_savefile%
)
rem 一時保存ファイルを保存ファイルにリネーム
ren %str_tmpfile% %str_savefile%
echo ○成功○
)
pause
> download_file_cmp.bat
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12425 100 12425 0 0 12425 0 0:00:01 --:--:-- 0:00:01 39696
○成功○
続行するには何かキーを押してください . . .
#おわりに
毎日ブラウザから保存していたファイルが、バッチファイルを叩くだけで保存できてしまうのは便利です。
自分が作ったツールで業務改善できると、ちょっと嬉しくなります。
ではまた!