WindowsバッチでPassiveでFTP操作する方法(WinSCP版)


Windows の FTP クライアントではパッシブモードで FTP 接続できないので bat 等で困ることがある。
そんなときは WinSCP コマンドをを買うと簡単に接続できる。

対象

  • Windows bat でパッシブモードで FTP を使いたい人

環境

  • Windows
  • WinSCP

前提

  • WinSCP がインストール済みであること

手順

WinSCP には WinSCP コマンドと言うコマンドライン用のツールが標準で用意されているのでこれを使う。
公式でコマンドラインオプションコマンドリファレンスが公式で用意されている。

bat ファイルとコマンドファイルを作成

今回は FTP コマンドをテイストファイルに外出しする。

FTP.bat
@echo off
option batch on

rem 実行ディレクトリに移動
CD "%~dp0"

rem FTPでファイルをダウンロードするディレクトリへ移動
cd ./download

rem WinSCPでFTP.txtのコマンドを実行
<WinSCPのインストールディレクトリ>\WinSCP.exe /script= FTP.txt

rem 終了
exit

FTP.txt

option batch on
confirm off

open ftp:/ftp%40user.jp:123%40456@123.45.67.89 -passive=on

lcd c:\get
cd /ftp

get *
rm *

exit

解説

FTP.bat
WinSCP.exe の引数で「/script」オプションで WINSCP コマンドを記載した FTP.txt を渡すことでファイルに書かれたコマンドを WinSCP で実行させる。

FTP.txt
拡張子は txt でなくても OK。

コマンド 説明
option batch on バッチモードを On に設定。問い合わせが必要な処理は自動的に「いいえ」が選択されて自動実行
confirm off ファイルの上書きなどの確認メッセージを無効化
open ftp:/ftp%40user:123%[email protected] -passive=on ID:ftp@user、PW: 123@@456 で 123.45.67.89 に Passive モードで接続。ID、PW の特殊文字はパーセントエンコーディングが必要
lcd c:\get ローカルの c:\get に移動
cd /ftp リモートの ftp に移動
get * リモートからすべてのファイルを取得
rm * リモートからすべてのファイルを削除
exit 切断

おまけ

<WinSCP のインストールディレクトリ>\WinSCP.com
を実行すると、コンソールが開き、WinSCP コマンドを実行できる。
動作確認などはこっちでやると検証しやすい。
WinSCP.com