このページでは、WinSCPのスクリプト/自動化機能について説明します。
WinSCPではGUIを利用した操作に加え、コマンドラインやスクリプトを使って処理を実行することが可能です。これらを利用することで、単純な処理を素早く実行したり、定型処理を自動実行させることができます。
WinSCPでスクリプトなどを利用した自動処理を行うには、「/script」オプション付きでWinSCPを実行します。また、引数としてコマンドを与えて実行させるには「/command」オプションを使用します。WinSCPのコマンドラインオプションについては、コマンドラインオプションページを参照してください。
なお、デフォルトでは自動処理中でも通常の場合と同じようにGUIで進捗や確認が表示されます(GUIモード)。「batch on」コマンドでバッチモードに切り替えることで、これらのGUIによる表示を無効にすることができます。また、バッチモードでは「option confirm off」コマンドで操作時に行われる確認を無効にしておくと良いでしょう。
なお、WinSCPでは複数のセッションを同時に開くことが可能です。また、SSHによるサーバーへの初回接続時はホスト鍵の確認が必要です。さらに、FTPSで信頼できない証明書を使用しているサーバーに接続する場合は、証明書の確認が必要です。
WinSCPはスクリプト処理が正常終了した場合、通常は終了コードとして「0」を返します。もしエラーやユーザーによる処理停止などが発生した場合は、終了コード「1」を返します。また、処理内容を詳しく確認したい場合はXML形式でのログ機能が有用でしょう。
WinSCPでは次のコマンドが実装されています。
コマンド | 説明 |
call | 任意のリモートシェルコマンドを実行 |
cd | リモートのカレントディレクトリを変更 |
chmod | リモートファイルのパーミッションを変更 |
close | セッションを閉じる |
exit | すべてのセッションを閉じてWinSCPを終了 |
get | リモートディレクトリから指定したファイルをダウンロード |
help | ヘルプを表示 |
keepuptodate | ローカルディレクトリでの変更をリモートディレクトリに反映させる |
lcd | ローカルのカレントディレクトリを変更 |
lls | ローカルディレクトリのファイル一覧を表示 |
ln | リモートディレクトリでリンクを作成 |
lpwd | ローカルのカレントディレクトリ名を表示 |
ls | リモートディレクトリのファイル一覧を表示 |
mkdir | リモートディレクトリを作成 |
mv | リモートファイルを移動/ファイル名を変更 |
open | サーバーに接続 |
option | オプション設定値を設定/表示 |
put | ローカルディレクトリからリモートディレクトリにファイルをアップロード |
pwd | リモートのカレントディレクトリ名を表示 |
rm | リモートファイルを削除 |
rmdir | リモートディレクトリを削除 |
session | セッション一覧を表示/アクティブなセッションを選択 |
synchronize | リモートディレクトリをローカルディレクトリと同期 |
SSHサーバーへの初回接続時には、ホスト鍵の確認が必要です。この処理は「/hostkey」オプションで自動化できます。
また、信頼できないFTPSサーバーへの接続時にも同様に認証が必要です。この処理を自動化するには、「open」コマンドの「certificate」オプションを使用します。
たとえばWindows Schedulerなどを使用して自動的に処理を実行させる場合など、普段WinSCP利用しているユーザーとは異なるユーザーでスクリプトを実行したい場合があります。通常WinSCPの設定はレジストリに記録され、ユーザーごとに独立しています。もし他のユーザーの設定を利用したい場合は、設定をINIファイルに書き出しておき、起動時に「/inifile」オプションでそのファイルを指定することで対応できます。
下記は次のような処理を行う場合の例です。
# バッチモードに設定し、確認/問い合わせを無効にする option batch on # ファイル上書きの確認などを無効にする option confirm off # サーバーに接続 open user@example.com # なおパスワードを指定して接続するには次のようにする # open user:password@example.com # リモートディレクトリを変更 cd /home/user # バイナリモードに変更 option transfer binary # ファイルをd:\にダウンロード get examplefile.txt d:\ # 切断 close # 異なるユーザーでサーバーに接続 open user2@example.com # リモートディレクトリを変更 cd /home/user2 # ファイルをアップロード put d:\examplefile.txt # 切断 close # 終了 exit
このスクリプトを「example.txt」に保存し、次のようにして実行します。
winscp.exe /console /script=example.txt
また、「/command」オプションを使用してコマンドラインで同様の処理を指定するには次のようにします。
winscp.exe /console /command "option batch on" "open user@example.com" "get examplefile.txt d:\" "exit"
「open」コマンドを利用する代わりに、コマンドラインで接続先サーバーを指定することもできます。この場合、まずサーバーへの接続が行われてからスクリプトが実行されます。
winscp.exe /console /script=example.txt user@example.com