バッチファイルでのFTPアップロード
バッチファイルでFTPに接続して何かをする場合、
バッチファイルとは別に、接続先や作業内容などを記述したコマンドファイルが必要になる。
それを、バッチファイルから呼び出す形。
とはいえ、このコマンドファイルも実行するバッチファイル内で作成してしまい、
それを保存、実行、削除、してしまえば、ファイルが一つで動作できるようになる。
- コマンドファイルを、tmpファイルとしてまず作成し、
- それをバッチで実行し、
- tmpファイルを削除
コマンドファイルは中身がテキストであればなんでも大丈夫なよう。
実行するコマンドファイルは一つだけれど、
便宜上、3つのファイルを作成し、それらを合体させて一つのファイルにするフローにした。
作成されるファイル
- ftp_login.tmp
- ftp_up.tmp
- ftp_loguot.tmp
- ftp_bat.tmp
1) ftpのログイン情報
open [サーバー名]
[ユーザー名]
[パスワード]
bin
prompt
bin
以降に処理を書く。
prompt
、は複数のファイルをアップロードやダウンロードする際に、確認を求められるのでそれを回避するために入れている。
2) アップロード情報
cd /home/hoge
mput *.html
アップするディレクトに移動して、アップロード。
put
がアップロード、で、m
をつけると複数ファイルの処理になる。
(m
をつけた場合のみ確認が出るので、それを出さないためにprompt
を入れている)
3) ログアウト情報
bye
close
bye
: FTP終了
close
: 接続を切断
4) 1〜3の内容をまとめて一つにする。
実行方法
ftp -s:ftp_bat.tmp
ログを残す場合は以下。
ftp -s:ftp_bat.tmp>>upload.log
今回調べた(全然知らなかったので)コマンドは以下。
コマンド | 説明 |
---|---|
@echo off | 以降の実行するコマンドを画面に表示させないようにする |
set | 変数を定義 |
rem | コメント |
% | 変数を参照 %file% 、%TEMP% など |
%cd% | 現在のディレクトリ |
:[ラベル] | ラベルを設定 |
goto [ラベル] | 指定したラベルへ移動 |
> | 左側に書いたものを右側のファイルへ書き込む(新規 もしくは 上書き) |
>> | 左側に書いたものを右側のファイルへ追記 |
type | テキストファイルの中身をそのまま画面に出力 |
cscript | 指定したスクリプトの実行 |
ファイルへの書き込み方法は、以下。
//直接記入
echo hoge> test.txt
--内容
hoge
//直接追記
echo fuga>> test.txt
--内容
hoge
fuga
//ファイル内容を記入
type test.txt> sample.txt
--内容
hoge
fuga
//ファイル内容を追記
type test.txt>> sample.txt
--内容
hoge
fuga
hoge
fuga
全体は以下のような形。
指定したサーバーに、同階層にあるhtml拡張子のファイルをアップロードする。
ログは、同階層に、upload.log
に記録。
@echo off
set path_local=%cd%
set path_remote=/home/uploadset
server=[ホスト名]
set user=[ユーザー名]
set password=[パスワード]
set ftplogin=ftp_login.tmp
set ftplogout=ftp_logout.tmp
set ftpupload=ftp_up.tmp
set ftpbat=ftp_bat.tmp
echo %user%> %ftplogin%
echo %password%>> %ftplogin%
echo bin>> %ftplogin%
echo prompt>> %ftplogin%
echo cd %path_remote%>> %ftpupload%
echo mput *.html>> %ftpupload%
echo bye> %ftplogout%
echo close>> %ftplogout%
echo open %server%>%ftpbat%
type %ftplogin%>>%ftpbat%
type %ftpupload%>>%ftpbat%
type %ftplogout%>>%ftpbat%
ftp -s:%ftpbat% >upload.log
del %ftplogin%
del %ftplogout%
del %ftpupload%
del %ftpbat%