Linux

WinSCPのバッチ実行でファイルを一括コピーする方法(スクリプト実行)

WinSCPは、Windowsで使える定番のファイル転送ツールです。

WinSCPはGUIでの操作が一般的ですが、コンソールモードでのコマンド操作やスクリプト機能などもサポートしています。

WinSCP 概要

WinSCP GUI操作

WinSCPは以下のようななGUIで操作することが多いですが、マウス操作が不要なバッチ的に一括して実行可能です。

WinSCP コンソールモード(バッチモード)

WinSCPのコマンドはLinuxなどのftpコマンドと似たコマンド体系となっているためにすぐに理解できると思います。

「open」「cd」「get」「put」「close」などのコマンドで操作します。

「help」でコマンド一覧が表示されます。

「help コマンド」でコマンドの詳細が表示されます。
以下は、「help open」の表示です。

コンソールモード手順

コンソールモードの起動

winSCP.con ファイルを実行します。

インストール方法にファイルの場所が異なります。

以下のどちらかのフォルダになります。

C:\Users\<ユーザ名>\AppData\Local\Programs\WinSCP\

C:\Program Files (x86)\WinSCP\

バッチ実行

基本の流れは以下になります。

(1)確認メッセージを無効にする。 option batch on/confirm off
(2)リモートマシンに接続する。 open
(3)転送モードをバイナリに設定。option transfer binary
(4)リモートディレクトリを変更。 cd
(5)リモートからファイルコピー。 get
(6)切断。 close
(7)winscpを終了。exit

# ===========================
# バッチモードに設定し、確認/問い合わせを無効にする
option batch on
# ファイル上書きの確認などを無効にする
option confirm off
# サーバーに接続
open ユーザ名:パスワード@IPアドレス
# バイナリモードに変更
option transfer binary
# リモートディレクトリを変更
cd /home/testuser/log
# ファイルをリモートマシンからコピー。 *も指定可能
get  AAA*.log  D:\work\dowload\
get  BBB*.log  D:\work\dowload\
# 切断
close
# winscpを終了
exit
# =============================

スクリプトファイルに保存して実行

上記の内容をファイルに保存して、コマンドプロンプトから実行できます。

“C:\XXXXX\WinSCP\\WinSCP.exe” /console /script=”C:\work\winscp-batch-01.txt”

“C:\XXXXX\WinSCP\\WinSCP.con” /script=”C:\work\winscp-batch-01.txt”

実行結果

実行画面は、こんな感じです。

便利な機能【ディレクトリの同期】

「synchronize」使用するとローカルPCのディレクトリとリモートサーバのディレクトリの内容を⽐較し、更新されたファイルのみを転送することができます。

リモートサーバ側のディレクトリの更新があった場合、
(ファイルが増えたとか、ファイルが変更されたとか)

ローカルディレクトリ側を更新(コピー)するには、以下になります。
synchronize local <ローカルディレクトリ> <リモートディレクトリ>

あとがき

コンソールモードを使いこなせば、自動化できそうですね。

ファイルの転送にftpコマンドを駆使していた頃を思い出しました。。。

TeraTermログ設定-eyeCatch
TeraTermで自動でログを残す方法TeraTermで、作業ログを自動で残す方法を紹介します。 毎回設定するのは面倒なのと、何かあったときの記録に使えて便利です。 ...