バッチ処理用 FTP/HTTP コマンド
battp.exe 取り扱い説明書

For Version 1.21
copyright(c) SIGNAL9, 2006,2007,2008

全般的解説

これは何?

バッチファイルでの利用を想定したFTP, HTTP クライアントソフトです。

ftpは、古いプロトコルとはいえまだまだ現役です。
作者も様々な局面で利用しますが、意外と見当たらないのは、「いつも 同じファイルを繰り返しGETしたりPUTしたりする」ようなものでした。

で、それがコレです。

「Windows付属のftpコマンドでいいじゃん?」
確かにそうなのですが、アレだと、いちいちスクリプトファイルにして…とかってメンドくさくないですか? 特に通信エラー起こしたときの判定方法とか。
また、よくあるGUI系のプログラムだとスケジュール起動したい時とかけっこう面倒だと思いません?
思わない…という人には無用のシロモノですので、さようなら(笑)
もともと、あるシステムの一部として、サーバで生成したファイルを、どんどんクライアントPCに取り込むという処理の為に作ったコマンド
プログラムです。

  1. INIファイルの設定に従って、ファイルをGET/PUTします。
    逆に言うと、削除・日付変更・ファイル名変更みたいなファイル操作はできません。

  2. ワイルドカード指定による複数ファイルの転送が可能です。
    ただし、ディレクトリの転送はできません。

  3. 現バージョンではftp利用時に2GBオーバーファイルを正常に扱えません(取り扱えるサイズの最大値が2GBです)

  4. 送信終了後に元ファイル(GETのときはサーバファイル、PUTのときはクライアントファイル)を自動的に削除できます。

  5. Ver1.2からHTTPGET・PUT・POST を追加しました。
    1. HTTPGETは拙作のhttpget.exe相当です。ただし、アレと違ってwininetは使用しておりません。
    2. HTTPPUTは書き込み権のあるHTTP1.1サーバ相手にしか使えません。
    3. HTTPPOSTはファイル1個だけを受信するCGIプログラム相手にしか使えません。
動作環境

本ソフトは以下の環境で開発・動作確認を行いました。
この為、動作環境もこれに準じます。

*Microsoft(R)日本語WindowsXP Pro (SP2)

サーバ側はIIS5.0でしか検証しておりません。
特にhttp系は、テストが不十分です。
PUT/POSTの使用に当たっては十分な検証をお願いします(^^;)。

インストール

コマンドライン(いわゆるDOS窓)で動かすプログラムですので、適当なディレクトリにbattp.exeをコピーしてください。サーチパスの通ったディレクトリだと便利です。
アンインストールする場合は、battp.exeを削除してください。

実行

コマンドプロンプトからbattp.exeを、動作を指定するINIファイルを指定して、実行します。

INIファイル名が省略された場合、battp.exeと同じディレクトリにある、battp.iniを読み込みます。
どちらの方法でもINIファイルが読み込めない場合にはエラーにします。

動き方

INIファイルのセクションごとに、上から下へ順番に実行します。
また、1ファイル毎に処理します。ある種のFTP/HTTPクライアントのように、コネクションを複数使って複数のファイルをいっぺんにやり取りすることはしません。

ERRORLEVEL

INIファイル内に複数のセクションを記述した場合、ERRORLEVELをセクションごとにリセットします。この場合、ERRORLEVELは最後に処理しセクションの結果となります。ERRLRLEVELで処理分岐を行いたい場合には、INIファイルは単一のセクションとすることをお勧めします。

正常終了した場合、ERRORLEVELに0を返します。
ERRORLEVEL=1は通信上のエラーやサーバ側の異常を示します。
ERRORLEVEL=2はローカル側の異常を示します。
エラーの場合は標準出力に詳細なエラー内容を表示します。

エラーを起こした場合の標準出力例
C:\Documents and Settings\foo>battp
copyright(c) 2006 SIGNAL9
useage:battp [Ini file name(default:battp.ini)]
2006/04/01 16:03:07 ===== Section: Server1 Mode: FTP GET
2006/04/01 16:03:28 ERROR: Login error.FTPのログインエラーを起こした。
2006/04/01 16:03:28 ===== FTP GET END
2006/04/01 16:03:48 ===== Section: Server2 Mode: HTTP GET前のエラーをリセットして処理続行。
2006/04/01 16:03:48 Target: http://www.yahoo.co.jp/
2006/04/01 16:03:50 http GET Result:200 OK
2006/04/01 16:03:50 date changed C:\Documents and Settings\foo\www_yahoo_co_jp__.htm
2006/04/01 16:03:50 ===== HTTP GET END
2006/04/01 16:03:50 ExitCode=0セクション2は正常なのでERRORLEVELは0。
C:\Documents and Settings\foo>

著作権・使用上の条件

本ドキュメントとそれに付随する一切のドキュメント及び実行プログラム(以下本ソフトウェアと略す)の著作権は、作者である SIGNAL9(以下作者と略す)が保有します。
本ソフトウェアの使用により発生した、いかなる損害に対しても作者は責任を負いません。
本ソフトウェアの改良・サポートの義務を作者は負いません。

上記条件に同意し、順守頂ける限り、無償で利用して頂いてかまいません。

改訂履歴
2006/03/03Ver1.0.1β
2006/05/23Ver1.2.0βHTTP PUT , POSTFILE 追加
2008/05/08Ver1.2.1β利用者様のご要望に基づきFTPPUT時にRemotePathを無視する(CWDしない)オプション追加


INIファイルのパラメータ一覧

先頭に[]で括ったセクションの名前を書き、そこから以下のような項目で通信条件を記述します。セクション名はひとつのINIファイルの中ではユニークでなければなりません。またセクション名に漢字は使えません。
具体的な書き方は添付のサンプルINIファイルをご覧下さい。

共通パラメータ
Mode 動作モード。FTPGET・FTPPUT・HTTPGET・HTTPPUT・HTTPPOSTFILEのいずれか。
デフォルトはFTPGET。

FTPGETFTPのGETを行う。
FTPPUTFTPのPUTを行う。
HTTPGETHTTPのGETを行う。
HTTPPUTHTTPのPUTを行う。
HTTPPOSTFILEmultipart/form-dataで指定したファイルのストリームを送信する。受信用のCGIプログラムが必要。

Target 通信先。FTPの場合はサーバ名(かIPアドレス)。HTTPの場合はURL。
Timeout TCP/IPタイムアウト。ミリ秒(1000分の1秒)であることに注意(秒と勘違いすると、トンデモなく短い時間で接続が切れることになります)。デフォルトは60000(60秒)。
ProxyHost プロクシのDNS名かIPアドレス
ProxyPort プロクシのポート(デフォルト:FTPの場合は21、HTTPは80)
ProxyUserName Proxyのユーザ名。
ProxyPassword Proxyのパスワード。
DeleteMode 送信元ファイルを削除するか(TRUE/FALSE)。デフォルトはFALSE。
Mode=FTPGETの場合、ftpサーバ側のファイルを削除します。
TouchDateMode GET時に日付を元ファイルにあわせるか(TRUE/FALSE)
デフォルトはTRUE。PUT時はこの項目は使用できません。
RemotePath リモートのファイルパス。FTPGET時はファイル名のワイルドカード使用可能
(ディレクトリのワイルドカードは不可)
2008/05/08:FTPPUT時のみ、本パラメータに # を指定すると、CWD(Chage Work Directory)を行わない(つまり書き込み先のディレクトリの有無がチェックされないことに注意してください)。
LocalPath ローカルのファイルパス。FTPPUT時にはファイル名のワイルドカード使用可能
(ディレクトリのワイルドカードは不可)
UserName Targetのユーザ名。 基本認証のみ。
Password Targetのパスワード。基本認証のみ。
平文でしか書けません。
TargetPort 通信ポート。FTPの場合デフォルトは21、HTTPは80
FTP専用パラメータ
ProxyMode FTPのプロクシの場合の認証方式。(0〜8のいずれか)

0USER[UserName]→PASS[Password]→ACCT
1USER[ProxyUserName]→PASS[ProxyPassword]→SITE[Target]→USER[UserName]→PASS[Password]→ACCT
2USER[ProxyUserName]→PASS[ProxyPassword]→USER[UserName]@[target]→PASS[Password]→ACCT
3USER[ProxyUserName]→PASS[ProxyPassword]→USER[UserName]→PASS[Password]→ACCT
4OPEN[target]→USER[UserName]→PASS[Password]→ACCT
5USER[UserName]@[target]→PASS[ProxyPassword]→PASS[Password]→ACCT
6USER[ProxyUserName]@[target]→[UserName]→USER[UserName]→PASS[Password]→ACCT
7USER[UserName]@[target] [ProxyUserName]→PASS[Password]→ACCT
8USER[UserName]@[ProxyUserName]@[target]→PASS[password]@[ProxyPassword]→ACCT

FtpBinaryMode FTPでバイナリモードを使うか(TRUE/FALSE)。デフォルトはTRUE。
FtpPassiveMode FTPでPASVモードを使うか(TRUE/FALSE)。デフォルトはTRUE。
HTTP専用パラメータ
HttpSaveHeader HTTPのヘッダー情報をセーブするか(TRUE/FALSE)。デフォルトはFALSE。
TRUEの場合、送信ファイルと同じディレクトリに、拡張子'.TXT'を付加してHTTPのリザルトを格納する。
HttpProtocol HTTPのプロトコルバージョン。1.0 か 1.1 を指定。デフォルトは1.1。
HttpKeepAlive HTTP 1.1 のKeepAliveを使うか(TRUE/FALSE)。デフォルトはFALSE。
HttpNoCache GETのとき、クライアントからキャッシュ不可ヘッダを付与するか(TRUE/FALSE)。デフォルトはTRUE(付与する)。
尚、HttpProtocolが1.0の場合は Pragma: no-cache を、1.1の場合は Cache-Control: no-cash を付与してリクエストする。
HTTP PUT/POSTでは本パラメータは無視する。
HTTPFieldName HTTPPOSTFILE のとき、本体エレメントのフィールド名を指定します。省略時は POSTFILE 。
ようするに、CGI側で「ファイル名」と見なすフィールド;
<INPUT TYPE=file NAME="file1"> の、file1 のこと。


サンプルINIファイル
複数セクションで連続して実行する例
; セクション名。ダブってなければ適当でOK。漢字不可。
[Server1]

; 動作モード。 FTPGET / FTPPUT / HTTPGET / HTTPPUT / HTTPPOSTFILE
Mode=FTPGET

; TCP/IP タイムアウト ミリ秒で指定 デフォルト=60000=60秒
Timeout=30000

;通信先ftpサーバー。IPアドレスかサーバ名で指定してください。
Target=myftp.server.com

; 通信ポート。FTPでは通常21です
TargetPort=21

;ユーザ名。
UserName=anonymous

;パスワード。平文しか書けませんのでセキュリティには注意。
Password=foo@battp

;バイナリモード True/False  デフォルトはTrue
FtpBinaryMode=True

;パッシブモード True/False デフォルトはFalse
FtpPassiveMode=False

;ファイル削除モード。True/False デフォルトはFalse。Mode=FTPGETの場合、ftpサーバ側のファイルを削除します。
DeleteMode=True

; 日付修正モード。 True/False デフォルトはFalse。
; Mode=FTPGETの場合、受信したファイルの日付をftpサーバ側のファイル日付と同じにします。
; ModeE=PUTの場合、本項目は無視。
TouchDateMode=True

;リモート(ftpサーバ側)のファイル。GET時にはワイルドカード指定可能。
RemotePath=/TEST/TEST/*.*

;ローカル(このプログラムが動いているパソコン)側の書き込み先ディレクトリ。PUT時にはワイルドカード指定可能。
LocalPath=.\TEST

[Server2]
; PUTの場合。
Mode=FTPPUT
Target=my.ftp.server
FtpTargetPort=21
UserName=Administrator
Password=HimitsuNoPassWord
FtpBinaryMode=True
FtpPassiveMode=False
DeleteMode=True
RemotePath=/TEST/TEST
; 2008/05/08 以下のように # を指定するとCWDしない。
;RemotePath=#
LocalPath=.\*.TXT

[Server3]
Mode=HTTPGET
Target=http://www.yahoo.co.jp/
LocalPath=.\
ProxyHost=my.proxy.server
ProxyPort=8080
HTTPSaveHeader=True
HttpNoCache=True
FTP Proxy (FTPファイアウォール)超え
[Server1]
Mode=FTPGET
; 例えばベクター相手に、単純なOPEN target→Target USER→PASS→ACCT
; するようなftp proxyの場合
Target=hp.vector.co.jp
UserName=VA012345
Password=MyPassWord
LocalPath=.\
RemotePath=/index.htm
ProxyHost=my.proxy.server
ProxyPort=8021
ProxyMode=4
HTTPPOSTFILE のサンプル
[Server1]
Mode=HTTPPOSTFILE
; 受信用のCGIのURLを指定する。
Target=http://www.foo.com/POSTPUT/fileup.cgi
LocalPath=.\TEST\*.*
ProxyHost=my.proxy.com
ProxyPort=8000
; HTTPFieldNameは INPUT TYPE=file NAME="file1" の、file1 のこと。
HTTPFieldName=file1
HTTPSaveHeader=False
DeleteMode=False
HTTP PUT のサンプル
[Server1]
Mode=HTTPPUT
; ターゲットは必ずディレクトリ(仮想パス)であること。CGIや
; 文書ファイルを指定してはならない。最終文字が / で終わって
; いない場合には / を付与してディレクトリと見なします。
Target=http://www.foo.com/POSTPUT/
LocalPath=.\TEST\*.*
ProxyHost=my.proxy.com
ProxyPort=8080
HTTPSaveHeader=False
DeleteMode=False

Vectorの作者ページ
作者連絡先