BETA

【初心者版】FFFTPをコマンドライン実行し定常作業を自動化

投稿日:2019-07-01
最終更新:2019-07-01

FTPコマンドなどで検索するとそこそこ情報はヒットするものの
知りたい情報が全てまとめられているサイトがなかなかなくて

断片的な情報をつないでようやく、自動化に成功することができた

おそらく他の方もそうだと思うのでここで紹介をしておこう

ちなみにやり方が2通りある

1つ目はコマンドからFTPを引数付きで起動させる方法
バッチファイル(ftp1.bat)を作成する
中身はこのようにする

"C:\Program Files\ffftp\ffftp.exe" user:[email protected]/home/work/test.log  

引数のオプションはこんな感じ %id%:%pass%@%host%%filename%

バッチファイルを実行すると/home/work/test.logがダウンロードされます。

これのデメリットはワイルドカードを使うことができないという点
複数ファイルをダウンロードする場合は複数行必要というわけだ

例えばログファイルが日付を持っている場合
test_yyyymmdd.log
このようなファイルの場合上記のコマンドでは不可能である
その場合は2つ目のやり方でやるしかない

2つ目のやり方コマンドより専用のFTPコマンドで実行する
テキストファイル(ftpcmd.txt)とバッチファイル(ftp2.bat)の2つを作成する
バッチファイルにはこのように
ftp -s:ftpcmd.txt

テキストファイルにはこのように

open 192.168.1.1  
id  
password  
prompt  
mget /home/work/test*.log  
bye  

そしてバッチファイルを実行する

こちらの方法はコマンドだけで簡潔するのでFTPは表面上は見えない

オプションに関してだが
promptは確認ダイアログを無視するコマンド
これをいれないとエンター押さないといけない

byeはexitと同じ

mgetがダウンロードコマンド
mputがアップロードコマンド
mが付くと複数ファイルにも対応している

本日のファイルだけ取得したい場合
ワイルドカードが使えるのが便利だがしかし、ログファイルが日付毎に区切られている場合
全てのファイルをダウンロードしてしまうことになる

それは避けたい時どうすればいいのか?

私はこんな無理やりっぽい方法で回避をしてみた。
最初にVBSでテキストファイルを作成して、その後バッチファイルを実行するというもの
VBSである必要性は何もないけど、標準であるプログラムでとりあえず使いやすいので
これを使いました。

VBSの中身はこんな感じ

Const OUTPUT_FILE_NAME = "ftpcmd.txt"  
Dim objFSO,outPutFile,unc,date,today  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
unc = objFSO.getParentFolderName(WScript.ScriptFullName)+"\"+OUTPUT_FILE_NAME  
Set outPutFile = objFSO.OpenTextFile(unc, 2, True)  
today=Left(Now(),10)  
date = Replace(Date,"/","")  
outPutFile.WriteLine("open 192.168.1.1")  
outPutFile.WriteLine("id")  
outPutFile.WriteLine("password")  
outPutFile.WriteLine("prompt")  
outPutFile.WriteLine("mget /home/work/test"+date+"*.log")  
outPutFile.WriteLine("bye")  

日付を取得してリプレイスで/を削除してyyyymmdd形式にしている

これでファイルが簡単にダウンロードできまっせ

注意点としては更新日付がダウンロードした時間になってしまうという点

まとめ
すごい単純な使い方の場合は1つ目の方法で問題ない
そこそこパターンがある場合は2つ目の方法が理想
わりと大手のシステム系の会社でもマクロ化されていなく人力で確認している
とこなんてざらにある
あほらしい
なんで誰もマクロ作らないのだろう・・・
数分かかる作業が数秒で終わるんだから

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@ken1の技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう