バッチファイルでFTP転送のエラー制御を行う
バッチファイルでFTP転送を行った場合に、FTP転送でエラーが発生したかどうかを判断する方法をご紹介します。
コーディング例
test.bat
SETLOCAL ENABLEDELAYEDEXPANSION (ECHO OPEN FTP-SERVER) > FTPCMD.txt (ECHO Anonymous) >> FTPCMD.txt (ECHO ) >> FTPCMD.txt (ECHO PUT test.csv) >> FTPCMD.txt (ECHO BYE) >> FTPCMD.txt FTP -s:FTPCMD.txt > FTP.log FOR /f %%A IN ('findstr /b /c:"226 " FTP.log^|find /c "226"') DO SET SuccessCnt=%%A IF "!SuccessCnt!" EQU "0" ( ECHO エラーが発生しました。 ) ELSE ( ECHO 正常に転送しました。 ) DEL /F /Q FTPCMD.txt DEL /F /Q FTP.log
FTP.log
ftp> OPEN FTP-SERVER FTP-SERVER に接続しました。 220 Microsoft FTP Service 200 OPTS UTF8 command successful - UTF8 encoding now ON. ユーザー (FTP-SERVER:(none)): 331 Anonymous access allowed, send identity (e-mail name) as password. 230 User logged in. ftp> PUT test.csv 200 EPRT command successful. 125 Data connection already open; Transfer starting. 226 Transfer complete. ftp: 52 バイトが送信されました 0.02秒 2.17KB/秒。 ftp> BYE 221 Goodbye.
実行結果
正常に転送しました。
2~6行目でFTPコマンドをFTPCMD.txtへ出力しています。
7行目のFTPコマンドでFTPCMD.txtの内容を実行しています。
通常、変数%ERRORLEVEL%でエラーの有無を確認できますが、FTPコマンドを実行した場合は変数%ERRORLEVEL%ではエラーの有無が判断できません。
そこでログファイルからFTP転送が成功した場合に出力されるコードである「226」の数をカウントし、0回の場合をエラーと判断します。
9行目ではFOR文でコマンドを実行しており、「findstr /b /c:"226 " FTP.log」により、FTP.logから行の先頭が「226 」で始まる行を抽出し、パイプ(|)でその内容を「find /c “226"」の入力として「226」を含む行数を取得しています。
パイプ(|)の前のキャレット(^)はパイプ(|)の文字を出力するためのものです。
FTP転送するファイルが複数の場合、例えば3ファイルを転送する場合は、変数SuccessCntが"3″でなければエラーと判断します。
以上、バッチファイルでFTP転送のエラー制御を行う方法のご紹介でした。