バッチファイルで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転送のエラー制御を行う方法のご紹介でした。

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ