windows

winSCPでファイル取得を自動化する

winSCP自動化

定期的にログを取得する作業があるので、winSCPをコマンドで実行し、batファイル1クリックで取得できるようにしてみた。

いちいちwinSCPで接続して移動してドラック&ドロップするのが面倒だったから。

個人的なテスト環境で実行するために作成したので、使用は自己責任で。

使用環境

クライアント側:windows10Pro

リモート側:MyCentOS

※クライアント側はwinSCPがインストールできていれば、多分なんでもOK

下準備

クライアント側にwinSCPをインストールし、接続先情報をパスワード付きでセッションとして保存しておく。

リモート側のサーバーがSFTP通信できるようにしておく。
(※winSCPをGUIで使用した時に接続できればOK)

ソースコード

@echo off

rem *****************************
rem 接続先情報設定
rem *****************************

set remoSession=MyCentOS
set remoGetFile=/home/vagrant/fileget/hoshifile

set locaDir=C:\tmp\collectfile\
set YMD_mhsc_dammy=%DATE:~,4%%DATE:~5,2%%DATE:~8,2%_%TIME:~,2%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%
set YMD_mhsc=%YMD_mhsc_dammy: =0%
set locaFolder=%YMD_mhsc%

mkdir %locaDir%%locaFolder%

echo --------------------------------------------------------
echo 接続:%remoSession%(※winSCPで保存したセッション名)
echo 取得:%remoGetFile%
echo 格納先:%locaDir%%locaFolder%
echo --------------------------------------------------------

rem *****************************
rem スクリプトファイル作成
rem *****************************

set scriptFile="C:\tmp\collectfile\scriptfileGetSC.txt"

echo open %remoSession%> %scriptFile%
echo get %remoGetFile% %locaDir%%locaFolder%\>> %scriptFile%
echo exit>> %scriptFile%

"C:\Program Files (x86)\WinSCP\winscp.com" /script=%scriptFile%


cmd/k

※windows使っているのでbatファイルにしていますが、linuxやmacならshellscriptで大丈夫だと思います。

このbatを実行すると下記のようなスクリプトファイルを作成することができます。

open MyCentOS
get /home/vagrant/fileget/hoshifile C:\tmp\collectfile\20210109_16392435\

 

ソースコード解説①接続先情報

まずは、接続先情報を環境変数に設定しています。

remoSessionに設定しているのは「MyCentOS」としていますが、これは、winSCPで設定したセッションの名前です。(パスワード付きで保存しておく必要があります)

winSCPをコマンドラインで実行する時には、

open [保存したセッション名]

とすると接続してくれるようです。

そのopen の引数に渡す値を環境変数で設定しています。

remoGetFileには取得したいファイルをフルパスで指定しています。正規表現やディレクトリを指定することもできるような気がします。試してないけど。

winSCPをコマンドラインで実行する時には、

get [リモート] [ローカル]

といった形で、getコマンドに引数を渡してあげると、リモートのファイルやフォルダを指定したローカルのディレクトリにコピーしてくれるみたいです。

このgetコマンドの[リモート]に設定する値を環境編須remoGetFileに設定しています。

ソースコード解説②接続元情報

次に、接続元情報を環境変数に設定しています。

locaDirに設定しているのは、取得したファイルを保管するフォルダ群のある場所。

locaFolderに設定しているのは、取得したファイルを保管するフォルダです。「YYYYMMDD_hhmmsscc」というフォルダ名で保存されるようにしています。

ソースコード解説③スクリプト作成

今回は、winSCPをコマンドラインで実行するためのスクリプトファイルを作成しています。

echo open %remoSession%> %scriptFile%

でファイルを初期化&openコマンドの記入

echo get %remoGetFile% %locaDir%%locaFolder%\>> %scriptFile%

でgetコマンドを追記しています。

 

わざわざスクリプトファイルを作成しているのは、batファイルを呼び出すときの引数でスクリプトファイルの内容を変更できるようにしたいから。

ソースコード解説③スクリプト実行

作成したスクリプトファイルを実行していきます。

winSCPをコマンドラインで実行するには、winscp.comを呼ぶ必要があります。特に変な設定などをしていないなら、winSCPのexeと同じ場所にあるはずです。

winSCP.comにスクリプトを渡すためには、/scriptと記述して、スクリプトファイルをイコールで指定します。

参考にさせていただいたサイト

コマンドのリファレンスが載っています。

https://ja.osdn.net/projects/winscp/wiki/script_commands

スクリプトファイルの実行方法を参考にさせていただきました。

https://mag.osdn.jp/10/04/20/1033216