ファイル数が多いのが嫌だ
- FTPをバッチファイルで実行するとき、対話形式で入力する部分をテキストファイル化して、FTPのコマンドラインオプション
でファイル名を指定します - user、passwordを指定してUnixの/var/www/htmlにindex.htmlを送信する場合、以下のテキストファイルを用意します
FTP_CMD.txt
user
password
cd /var/www/html
ascii
put index.html
bye
実行するときは、FTP -s:FTP_CMD.txt
のようにオプションでファイル名を指定します
ちょっとしたスクリプトを実行するのにBATファイルとコマンドファイルの2つを用意しなければなりません
- そこで、Windows環境でバッチファイルとFTPコマンドを一つのファイルにできないかということ
基本的な構造
- ファイル名の拡張子は.batにします
拡張子を.batにすることによってダブルクリックでバッチファイルとして起動します - FTPのコマンドラインオプション -s: で自分自身を読み込むようにします
FTP -s:"%~f0"
と指定すると自分自身をFTPコマンドとして実行します - バッチファイルとして実行する部分はFTPにとって無視できるようコメント行になるようにしたいのですが、
FTPコマンドにはコメントに相当する命令がありません
そこで、FTPコマンドの!
を利用します
FTP対話中に!
を打つと、シェルにエスケープします
Windows環境ではDOSモードになります
そこで、!REM
と入力すると、REMはDOSではコメントになるので、何もせずにFTPに制御が戻ります
この仕組みを利用して、
!rem 2>Nul & @Echo off & @CLS
のように書くと、FTPにとっては無害な行で、
バッチファイルとしては、!rem
がエラーになるけれども、エラーメッセージはNULにリダイレクトすることによって
メッセージ出力が抑止され & のあとに記述してあるコマンドが実行されます - バッチ部分の最後はEXITを実行するようにすれば以降の行はバッチファイルとしては無視されます
!rem 2> Nul & @PAUSE & @EXIT /b
実際の例
こんな感じで書けます
SAMPLE_FTP.BAT
!rem 2>Nul & @Echo off & @CLS
!rem 2>Nul & @ftp -s:%~f0
!rem 2>Nul & @pause & @exit
open HOSTNAME
USERNAME
PASSSWORD
cd /var/www/html
ascii
put test.html
bye
・ HOSTNAMEの部分には転送先サーバーのホスト名またはIPアドレスを指定します
・ USERNAMEの部分にはログインユーザーIDを指定します
・ PASSWORDの部分にはパスワードを指定します