bat(バッチ):WindowsバッチでFTPを自動化実行する | IT技術者のIT技術者によるIT技術者のためのブログ

IT技術者のIT技術者によるIT技術者のためのブログ

IT技術者向けのブログです。

PHPやJavascript、HTMLやCSS、iPhoneやAndroidなど

Web関係の技術情報を発信します。

【更新:2019/11/29】「Windows10バッチ(PowerShell)でAWS EC2へSFTP処理(スクリプト)」も参考にしてください


ウィンドウズのコマンドプロンプトご存知ですか?


バッチってご存知ですか?


バッチファイル作っていろいろな作業が自動化できること、ご存知ですか?





今回はバッチファイルでFTPを行う方法を説明します。



for /f "tokens=1" %%a in ('chdir') do set CURRENT=%%a
set FTPCOMMAND=%CURRENT%¥ftpcommand.txt
for /f "tokens=1" %%a in ('date /t') do set TODAY=%%a
for /f "tokens=1-3 delims=/" %%a in ('echo %TODAY%') do set DIRYM=%%a%%b
for /f "tokens=1-3 delims=/" %%a in ('echo %TODAY%') do set DIRYMD=%%a%%b%%c
mkdir LOG
set LOGFILE=%CURRENT%¥LOG¥ftplog_%DIRYMD%.log

for /f "tokens=1" %%a in ('date /t') do set TODAY=%%a
for /f "tokens=1" %%a in ('time /t') do set TIME=%%a

echo @ %TODAY% %TIME% : %BAT_NM% Started !! > %LOGFILE%
mkdir %DIRYM%¥%DIRYMD% >> %LOGFILE%
cd %DIRYM%¥%DIRYMD% >> %LOGFILE%

Rem ### 今回はここからです。 ####

echo open 192.168.XXX.XXX> %FTPCOMMAND%
echo user_id>> %FTPCOMMAND%
echo password>> %FTPCOMMAND%
echo bin>> %FTPCOMMAND%
echo cd /http/log/>> %FTPCOMMAND%
echo mget *.csv>> %FTPCOMMAND%
echo mdel *.csv>> %FTPCOMMAND%
echo quit>> %FTPCOMMAND%

ftp -i -s:%FTPCOMMAND% >> %LOGFILE%



今回は少々長いですね。ただし、説明する部分は「今回はここからです。」からになります。


そこから上は、前回前々回を参考に読み解いてください。


さて、Windowsコマンドにはftpコマンドが用意されています。


コマンドプロンプトでは、ftpコマンドに続けて、接続したいサーバーのIPアドレスを入力し


ユーザーID、パスワードと順番に入力するとサーバーに接続し、FTPが行えるようになりますが、


バッチファイルでは、どうしたら同じことが実現できるでしょう?


バッチファイルでは、ftpで実行したい内容は、外部ファイルに記述し、


それを読み込ませることによりFTPを実行できるようにしています。


今回の事例では、その外部ファイルもバッチファイル内で用意してしまう内容となっています。



echo open 192.168.XXX.XXX> %FTPCOMMAND%
echo user_id>> %FTPCOMMAND%
echo password>> %FTPCOMMAND%
echo bin>> %FTPCOMMAND%
echo cd /http/log/>> %FTPCOMMAND%
echo mget *.csv>> %FTPCOMMAND%
echo mdel *.csv>> %FTPCOMMAND%
echo quit>> %FTPCOMMAND%



このechoしている部分がすべてftpコマンドで実行する内容となります。


上から順にみると、最初にopenでサーバーに接続します。


次のuser_idは接続するユーザーを設定してください。


passwordも同様に各ユーザーのパスワードを設定してください。


binはバイナリでファイル転送を行う指定をしています。


cdでサーバー内のディレクトリを移動しています。


mget *.csvは、サーバーからファイルを取得しています。


複数ファイルを取得するので、mgetを使い、*.csvで拡張子がcsvのファイルをすべて取得します。


mdel *.csvは、サーバーからファイルを削除しています。


複数ファイルを削除するので、mdelを使い、*.csvで拡張子がcsvのファイルをすべて削除します。


したがって、サーバーから取得したファイルをサーバーからすべて削除するということになります。


これらの内容を>>でファイル(%FTPCOMMAND%)に出力しています。そして最後に、



ftp -i -s:%FTPCOMMAND% >> %LOGFILE%



ftpコマンドで、作成したファイル(%FTPCOMMAND%)を読み込むことにより、バッチファイルで自動的にFTPを実行できるようにしています。


少し駆け足でしたが、わかりましたでしょうか?


このバッチファイルをタスクスケジューラーなどに登録すれば、もっと便利に、自動化処理が可能となります。