Windows tips‎ > ‎MS-DOS, CMD‎ > ‎

FTP自動化

DOSのバッチファイルでFTPの自動化を毎回しこしこ書くのは面倒くさいので引数を与えて外から呼べるバッチにしておきます。

第一引数で動作を指定します。GET/PUTは標準出力にFTPオペレーションの結果を、VIEWはGETとほぼ同様ですが終了後にファイルを削除するのと、標準出力にGETしたファイルの内容を表示する動作になります(対象は当然テキストファイルを想定。)。

使 い方はコマンドプロンプト又はバッチファイル内などから引数を与えて呼ぶだけです。FTPサーバとクライアント間にアプリケーションゲートウェイ無しの NAT/IPマスカレード(NAPT)がかんでいると、PASVがWindows標準のFTPクライアントでは対応してないので、きっと使えないでしょう (手動でやっても同じです)。

以下「FTP_Capsule.bat」等として保存。

@echo off
rem ## -----Format-----
rem ## FTP_Capsule.bat Select_FTP_Action[GET|PUT|VIEW] Target_FTP_Server_Address FTP_Server_User_ID FTP_Server_User_PW Local_Host_Current_Directory Local_Host_File_Name Remote_Host_File_Full_Path
rem ## -----Example-----
rem ## FTP_Capsule.bat GET 192.168.1.1 root root "C:\Documents and Settings\" dummy.txt /etc/dummy.txt

set Select_FTP_Action=%1
set Target_FTP_Server_Address=%2
set FTP_Server_User_ID=%3
set FTP_Server_User_PW=%4
set Local_Host_Current_Directory=%5
set Local_Host_File_Name=%6
set Remote_Host_File_Full_Path=%7

cd "%~dp0"
echo open %Target_FTP_Server_Address%>ftp_Capsule_cmd.tmp
echo %FTP_Server_User_ID%>>ftp_Capsule_cmd.tmp
echo %FTP_Server_User_PW%>>ftp_Capsule_cmd.tmp
echo bin>>ftp_Capsule_cmd.tmp
echo lcd %Local_Host_Current_Directory%>>ftp_Capsule_cmd.tmp

goto %Select_FTP_Action%
  :GET
    echo get %Remote_Host_File_Full_Path% %Local_Host_File_Name%>>ftp_Capsule_cmd.tmp
    goto :End_Select_FTP_Action
  :VIEW
    echo get %Remote_Host_File_Full_Path% %Local_Host_File_Name%>>ftp_Capsule_cmd.tmp
    goto :End_Select_FTP_Action
  :PUT
    echo put %Local_Host_File_Name% %Remote_Host_File_Full_Path%>>ftp_Capsule_cmd.tmp
    goto :End_Select_FTP_Action
:End_Select_FTP_Action

echo disconnect>>ftp_Capsule_cmd.tmp
echo bye>>ftp_Capsule_cmd.tmp

ftp -s:"%~dp0ftp_Capsule_cmd.tmp">"%~dp0tmp_ftp.log"

if %Select_FTP_Action%==VIEW (
cd %Local_Host_Current_Directory%
type %Local_Host_File_Name%
del %Local_Host_File_Name%
) else (
type "%~dp0tmp_ftp.log"
)

del "%~dp0ftp_Capsule_cmd.tmp"
del "%~dp0tmp_ftp.log"

ちなみに「cd "%~dp0"」これはスクリプト本体がある場所を示す環境変数で、そこにchange directoryしてます。

それと、
goto %Select_FTP_Action%
~中略~
:End_Select_FTP_Action
のくだりはBATファイルで無理やりcase文的な分岐を実装するのに便利なテンプレになります。