bitsadminの使い方がちょっと厄介。
まず「ダウンロードジョブ」と呼ぶものを作り(/create)、
そこにダウンロードファイルと保存先を指定するコマンドを登録し、
そのジョブを実行することで初めてHTTPでのファイルダウンロードを始める。
そして、最後にはそのジョブを後片付け(削除)する必要がある(/complete)。
あと、コマンド実行中の状況(ダウンロード中なのか、接続に失敗したのか、完了したのか)が分からないが、
別のコマンドプロンプトで
bitsadmin /rawreturn /info {ジョブ名}
コマンドを実行することでリアルタイムに確認できる。
※大抵の失敗は
「TRANSIENT_ERROR - 回復可能なエラーが発生しました。 最小再試行遅延が切れると転送が再試行されます。」
だけど、たいていはもう一回resumeすればいい模様。
わたしはこんな感じでバッチを作りました。
httpDownloader.bat
@echo off
@echo,
@echo ### ダウンロードジョブにダウンロード対象ファイルを指定します。
bitsadmin /rawreturn /create /Download myDLjob
bitsadmin /rawreturn /addfile myDLjob http://?????????????? {ダウンロード先フルパス}
:<ダウンロードしたいファイル分addfile>
@echo,
@echo ### ファイルをダウンロードします。
call :bitsadminDL自動判定 myDLjob
@if errorlevel 1 (
@REM 戻り値1以上は失敗。
bitsadmin /rawreturn /reset
) else (
bitsadmin /rawreturn /complete myDLjob
)
@echo ※「Job completed」が出ていれば、全ファイルのDLが完了しています。
@echo,
@echo ### ダウンロードジョブ状態確認
bitsadmin /rawreturn /list
@echo ※「bitsadmin /rawreturn /list」実行で何か残っていれば、DLに失敗しています。
@echo なお、「bitsadmin /cancel myDLjob」でジョブをクリアできます。
exit /b 0
@REM ---------------------------------------------------------------------------
:addfiles
bitsadmin /rawreturn /addfile myDLjob http://172.24.170.133:7350/%1/%2 %WORKDIR%\%1\%2
exit /b 0
@REM ---------------------------------------------------------------------------
@REM ### 呼び元でジョブをcreateし、completeしてください。
:bitsadminDL自動判定
@setlocal
@if [%1] == [] (
@echo [X] arg1:ジョブ名を指定してください。
exit /b 1
)
@set myDLjob=%1
@set RESULT=
:LOOP
echo %RESULT% | find "TRANSFERRED" > nul
@if not errorlevel 1 (
@echo,
@echo ### 転送完了
exit /b 0
)
echo %RESULT% | find "CONNECTING" > nul
@if errorlevel 1 (
@REM ### それ以外の場合は転送ジョブを再開する。
bitsadmin /rawreturn /resume %myDLjob%
) else (
@REM ### 転送中の場合はちょっと待つ
)
choice /C YN /T 2 /D N /M "やめる?[Y]/other"
@if errorlevel 2 (
@REM ### "N"の場合2 ※入力タイムアウト(2秒)でも"N"
for /f "usebackq delims=" %%a in (`bitsadmin /rawreturn /info %myDLjob%`) do set RESULT=%%a
goto :LOOP
) else (
@REM ### "Y"の場合1(2未満なのでこちらの分岐)
@REM ### 続けないなら、ジョブをresetして終了。
bitsadmin /rawreturn /reset
)
@endlocal
exit /b 9999