2005年11月05日

FTP で自動バックアップ(その3)

FTP 自動バックアップの最終回です。今回は サクッ!と行きましょう^^


(その1) で公開しておいたソースについて見ていきますね。

やっていることは、前回行ったダウンロードの手順どおりのことです。応答メッセージを画面の代わりにログファイルに記述しています。

あとは、毎回同じファイル名にバックアップしていたのでは、万一、データが飛んでしまったのを気付かずにいた場合、バックアップデータも空になってしまって意味ありませんので、ここでは1週間分を別名で保存するようにしています。

名前の付け方を工夫すれば、この期間を変更することは可能です。


では、上から見ていきましょう。

@echo off   

バッチ処理で実行されるコマンドの表示をしないように設定しています。これを省略すると、不要な多くの画面出力が発生するため、非常に見にくくなってしまいます。先頭の @ は、その行の実行コマンドを表示しないようにするために使われます。全ての行に @ を付けても結果は同じですが、ソースが見にくいですよね。まあ、おまじない程度に思ってください。

echo Auto FTP Backup Running.....

画面に実行中のメッセージを表示しているだけです。

set BACKUP_FILE=man_cp.txt
set BACKUP_FILE=%BACKUP_FILE% tmp_index.htm
set BACKUP_FILE=%BACKUP_FILE% box01-5.LZH


BACKUP_FILE という環境変数にバックアップで保存するファイル名を設定しています。1行で書いてもいいのですが、変数に値を追加する方法を敢えて使用しました。非常に多くの値をセットしたい場合、無理やり1行で書こうとすると、とっても長くなり見にくくなってしまいますもんね。

set LOG_FILE=ftp_log.txt

環境変数にログファイル名をセットしています。これは長さも変わらないし、そのまま使ってもよさそうに思えますよね。でも、なぜわざわざ変数を使用するかっていうと、出力するログファイルのサイズが大きくなってしまえば、名前を変更したくなったりしますよね。そういった時に直にファイル名を指定していると、ぜ〜〜んぶ書き直さないといけなくなっちゃうんです。変数をつかっておけば、この1箇所を変更するだけで済みますからね。

echo %date% %time% >> %LOG_FILE%
echo. >> %LOG_FILE%


コメントのとおり、ログファイルに日時を書き出しています。%date% %time% は、コマンドプロンプト自体が既に設定している環境変数で、日付、時間の情報が格納されています。そして、echo. は空行を出力します。ピリオドの位置に注意して下さいね。スペースを挟んでしまうとピリオドが出力されてしまいますよ。空行出力の定型だと思って問題ありません。

ftp -i -s:ftp_login.txt >> %LOG_FILE%

いよいよ FTP コマンドですね。 -i オプションで複数ファイル指定時に対話型にしないように指示しています。そして重要なのが -s オプション。これに、ftp_login.txt という FTP セッション中に自動入力するデータを記述したファイルを指定しています。そして、FTP セッションの応答をログファイルに記述するようにリダイレクトしていますね。

では、(その1) で一緒に公開した ftp_login.txt を見てみましょう。前回行った手順も思い出して下さいね。

open example.com
(ユーザー名)
(パスワード)
cd tenukipg
type ascii
get man_cp.txt man_cp.txt
cd ../tmp
type ascii
get index.htm tmp_index.htm
type binary
get box01-5.LZH box01-5.LZH
close
bye


まず、open コマンドで接続するサーバーのドメインを入力しましたよね。これが1行目です。
そうしたら、ユーザー名を尋ねられたので、ログインユーザー名を入力しました。2行目です。
次に、パスワードを聞いてきたので、入力しました。3行目です。お気づきのことと思いますが、このファイルにはユーザー名とパスワードが誰にでも読める形で記述されることになりますので、他人に見られないように保存する必要がありますので、気をつけてくださいね。
その次は、目的のディレクトリに移動しています。ここでは tenukipg というディレクトリに移動する例で記述しています。実際に存在するディレクトリを指定してくださいね。
次に、テキストモードを指定、そして、get コマンドで man_cp.txt をダウンロードしています。
それから、更にディレクトリを移動してモードを指定し、ダウンロードファイルを tmp_index.htm、box01-5.LZH という名前で保存しています。この名前が、BACKUP_FILE に設定した名前と一致していることに注目して下さいね。でも、このままのファイル名を使えってことじゃないですよ^^; 両方とも、実在するファイル名に変更して下さいね。
そして、ダウンロードが済んだら切断して、FTP セッションの終了です。

どおです? 前回に手作業でやったことをそのまま記述しているだけってことが解かって戴けたと思います。


FTP セッションが終了すると、処理はコマンドプロンプトに戻りますので、我々もバッチファイルに戻りましょう。

まず、ログファイルに空行を出力していますね。まあ、これはどおでもいいでしょう。

コメントにもあるとおり、日付より取得できる曜日文字をファイル名に付加することで、それぞれのファイルに7通りのファイル名が作成できますよね。なので、ダウンロードした決まった名前のファイルをこれで変更しています。

for /f "usebackq tokens=1-4 delims=/ " %%i in (
`date /t`
) do (
set EXT_STRING=%%l
)


よ〜く読んでみてくださいね。for コマンドの /f オプションを利用して date コマンドを実行し、その出力を解析して EXT_STRING という環境変数に曜日を取得しています。??? っていう状態でしたら、for ループ(その2) を復習してみてくださいね。


付加する曜日文字が取得できたら、あとはそれぞれのファイルの名前を変更すれば終了です。

for %%i in (%BACKUP_FILE%) do (
if exist %%~ni_%EXT_STRING%.%%~xi (
del %%~ni_%EXT_STRING%.%%~xi
)
ren %%i %%~ni_%EXT_STRING%.%%~xi
)


BACKUP_FILE にセットしたファイル名を for ループで処理しています。%%~ni_%EXT_STRING%.%%~xi が変更するファイル名になります。この名前のファイルが既に存在したら、そのファイルを削除しています。その後に ren コマンドでファイル名を変更して完了です。

所々に出てくるログファイルへの記述部分は、各自の好みで設定すれば問題ありません。この例では、単に私自身が見やすいように、欲しい情報と空行を挿入しているだけですので・・・


どおでしたか? 説明してしまえば、そんなに難しいことをやっている訳じゃないことが解かってもらえると思います。

そろそろ自分自身の要求を満たすものが書きたくなってきてはいませんか?

えッ? そんな必要ないって??

・・・そッ、そうですよね・・・(^^;)
使いやすいフリーソフトがいっぱいありますもんね・・・


まあ、その気になって、何か解からないことでもあったら、コメントにでも書き込んでくださいな。例え、解からないことでも必ずお答えしますよ。・・・「解からない」って ・・・ヾ(- -;)モシモシ


とりあえず、今はネタが思いつかないので、次回はまた便利コマンドを紹介しますかね・・・

応援ポチ  お願いしま〜す。

posted by Woody at 02:10 | 静岡 ☁ | Comment(0) | TrackBack(0) | コマンドプロンプト
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのTrackBack URL
http://blog.seesaa.jp/tb/8980043
※特に許可した場合を除き、一方的な TrackBack は
  SPAM として削除いたします。ご了承ください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。