干し石榴長文用

長文以外はTumblrへ徐々に移します。

DOSスクリプトでwgetの出力からレスポンスヘッダーの値を抽出する

仕事でサーブレットとクライアントスクリプト(DOS)をセットで作ることになったのですが、ローカルに保存するファイル名をサーブレット側で指定する必要にかられたので、Pragmaフィールドに入れてスクリプトで抽出してみました。

  • レスポンスヘッダー
HTTP/1.1 200 OK
Content-Type: text/plain
Pragma: file_name=hoge
Content-Length: 12
Connection: keep-alive
Server: Jetty(i-jetty 1.0)
  • DOSスクリプト
SET OUTPUT_FILE=output.txt
SET ENTITY_FILE=entity.dat

wget --server-response --output-file=%OUTPUT_FILE% --output-document=%ENTITY_FILE% http://hoge.orz/foo-bar

REM Delete the response file when it is empty.
FOR %%L IN (%ENTITY_FILE%) DO IF %%~zL==0 DEL %ENTITY_FILE%

IF EXIST %ENTITY_FILE% (
    REM Find response header "Pragma: file_name=hoge.csv" and rename response file.
    FOR /F "delims=" %%L IN (%OUTPUT_FILE%) DO (
        FOR /F "tokens=1-2" %%I IN ("%%L") DO (
            IF "%%I" == "Pragma:" (
                FOR /F "delims== tokens=1-2" %%i IN ("%%J") DO (
                    MOVE %RESPONSE_FILE% %%j
                    ECHO Save to %%j
                )
            )
        )
    )
    DEL %OUTPUT_FILE%
)

いやはや、最初DOSでそんなの無理だと絶望したのですが何事もやってみればなんとかなるものですね.