プログラミング

【アプリ開発入門】WinSCPを使ってバッチからFTP接続する方法

-プログラミング
-,

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 などカバーできるプロトコルのハイム広いので利便性は格段に上がりますま。

興味ある方は是非トライしてみてください!

-プログラミング
-,