WIndowsのバッチでFTP接続をする時によく使うのが標準FTPだと思います。
実装はラクですがPassiveモードに非対応など結構制約が大きく、使い勝手に難があるのが欠点です。
標準FTPの欠点を補うことができて、なおかつ実装しやすい方法としてオススメながWinSCPコマンドを使う方法です。
WinSCPと聞くとGUIのFTPツールと思われがちですが、実はコマンドもあります。
今回はWinSCPコマンドFTP接続するバッチの作り方を説明します。
WinSCPのインストール
まず最初にWinSCPをインストールします。サイトによっては有償でしかダウロードできないこともありますが、WinSCPの公式からはフリーでインストールできます。
インストール方法は簡単なので割愛しますが、この先はインストールされていることが前提となります。
WinSCPのコマンドについて
WinSCPでは標準でコマンドが用意されています。
意外とGUIしか知らない方も多いですが、バッチなどとも組み合わせることができ、とても便利です!
是非使い方を覚えてください。
コマンドについては公式のドキュメントも豊富で日本語のコマンドリファレンスやコマンドラインオプションがあるので是非参考にしてください。
正直、公式ドキュメント見るだけでコード組めてしまうかなと思ったりします。
コマンドプロンプトでWinSCPのコマンドを実行する方法
バッチを組む前に、コマンドプロンプトでWinSCPのコマンドを実行する方法を説明します。
実際にコマンドをたたいて動作確認する際に便利です。
起動するのは簡単で、WinSCPをインストールしたフォルダにあるWinSCP.comをダブルクリックで起動するだけです。
起動すると以下のような画面が立ち上がりWinSCPのコマンドを打てるようになります。
例えば、openコマンドを実行すると接続先のHOSTを聞かれます。
WinSCPのコマンドでFTP接続するバッチのサンプル
最初にコードを載せます。コメントが各行の説明になります。
バッチからWinSCPへ接続しますが、WinSCPのコマンドはFTP.txtファイルに外出しして同じ階層に置いておきます。
ユーザ/パスワードに特殊文字が含まれる場合、パーセントエンコーディングが必要です。
この後補足説明するので、参考にしてください。
<バッチの説明>
バッチのおいてあるディレクトリのサブディレクトリdownloadにリモートから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
「123.45.67.89」にユーザ:「ftp@user.jp」、パスワード:「123@456」で接続
open ftp:/ftp%40user.jp:123%40456@123.45.67.89
「dir」に移動
cd /dir
フォルダの中身を全部ロカールへコピー
get *
取得したファイルをリモートから削除
rm *
終了
exit
補足:特殊文字のパーセントエンコーディング一覧
FTP接続する際は以下のような構文となりますが、ユーザーやパスワードに特殊文字が含まれていると、正しく解釈されず、接続エラーとなります。
open ftp:/ユーザ:パスワード@URL(IP)
そのため、URLでユーザーやパスワードに特殊文字が使われている場合は、パーセントエンコードが必要です
例
open ftp:/ftp@user.jp:123@456@123.45.67.89
↓
open ftp:/ftp%40user.jp:123%40456@123.45.67.89
一覧を作成したので参考にしてください。
特殊文字 | パーセントエンコード |
---|---|
@ | 40% |
$ | 24% |
% | 25% |
& | 26% |
] | %5B |
[ | %5D |
? | %3F |
/ | %2F |
< | %3C |
~ | %7E |
# | 23% |
` | %6D |
! | 21% |
^ | %5E |
* | %2A |
( | 28% |
) | 29% |
+ | %2B |
= | %3D |
} | %7D |
| | %7C |
: | %3A |
「 | 22% |
; | %3B |
' | 27% |
, | %2C |
> | %3E |
{ | %7B |
スペース | 20% |
まとめ
使い方はとってもカンタンで、Win SCP のインストールさえすれば簡単にバッチで Win SCP 経由で FTP 接続することができます。
Windows の標準 FTPと比べてもPassiveモードでの接続や FTP 以外にもsftpやftps などカバーできるプロトコルのハイム広いので利便性は格段に上がりますま。
興味ある方は是非トライしてみてください!