🖥
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%40456@123.45.67.89 -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 コマンドを実行できる。
動作確認などはこっちでやると検証しやすい。
Discussion