WinSCPスクリプト　及び実行

ファイルの自動ダウンロードで苦労をしていた人は下記のサイト及び抜粋した例をご参照ください。
あまり整理をきちんとしていないのですが、メモ程度です。

##WinSCPスクリプト例##
https://osdn.jp/projects/winscp/wiki/scripting

```bat:WinSCPスクリプト実行例（異なるアカウント間で共通の設定を利用する）
# バッチモードに設定し、確認/問い合わせを無効にする
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


##手動でコマンドを叩く例です。

WinSCPスクリプト入門：コマンドやバッチファイルとの連携による自動処理 2ページ
https://osdn.jp/magazine/10/04/20/1033216/2

```bat:ファイルのダウンロード

winscp> open taro@172.17.4.69　　←172.17.4.69に「taro」というユーザーで接続
サーバを探索中･･･
サーバに接続しています･･･
認証しています･･･
ユーザ名"taro" を使用中
キーボード対話式認証を使用。
Password:　　←パスワードを入力
認証されました
セッションを開始しています･･･
リモートディレクトリを読み込み中･･･
セッションを開始しました
アクティブセッション: [1] taro@172.17.4.69　　セッション番号「1」としてセッションを開始
winscp> cd public_html　　　←「public_html」ディレクトリに移動
/Users/taro/public_html
winscp> lcd "%HOME%"　　←ローカルのカレントディレクトリをホームディレクトリに変更
C:\Users\taro
winscp> ls　　←リモート側のファイル一覧を表示
drwxr-xr-x  34 taro    taro         1156 Apr 14 17:24:12 2010 .
drwxr-xr-x 360 taro    taro        12240 Apr 14 17:23:54 2010 ..
-rw-r--r--   1 taro    taro         2886 Apr 14 17:24:12 2010 20061130-115028.html
-rw-r--r--   1 taro    taro         3712 Apr 14 17:24:12 2010 20061201-082224.html
　：
（省略）
　：
-rw-r--r--   1 taro    taro        25223 Apr 14 17:24:12 2010 index.html
winscp> get *.html　　←拡張子が「.html」のすべてのファイルをダウンロードする
20061130-115028.html      |          2 KiB |    0.0 KiB/s | ascii  | 100%
20061201-082224.html      |          3 KiB |    0.0 KiB/s | ascii  | 100%
　：
（省略）
　：
index.html                |         24 KiB |  948.2 KiB/s | ascii  | 100%
winscp> exit　　←WinSCPを終了する

```

##コマンドラインで直接実行する例
```bat
@echo off

REM -------------------------------------------------
REM ログパスを定義する
REM -------------------------------------------------
REM コンソールに出力されたメインのログを保存する（実行結果を確認時に使用）
@set logfile_main=C:\TEST2\logfile_main.log
REM WinSCPが自動的出力された詳細のログを保存する
@set logfile_detail=C:\TEST2\logfile_detail.log

REM -------------------------------------------------
REM コマンドラインで実行するときの共通の部分を定義する
REM aimori2@192.168.1.2の部分は「aimori2@192.168.1.2」という名前で保存しておいたセッションです。
REM 事前にWinSCP.exeにてパスワード付きで保存すればOK、下記の（図１）を参照くだい。
REM -------------------------------------------------
@set Program="C:\Program Files (x86)\WinSCP\WinSCP.com" aimori2@192.168.1.2 /log=%logfile_detail% /command 

REM -------------------------------------------------
REM 実際にコマンドラインで実行するコマンドを定義する
REM 下記の同期コマンドは、サーバー上のデータをローカルの該当フォルダに同期する場面に使えるコマンドです。
REM （方向はremoteサーバー->local　ファイルが同じ場合ローカルを更新しない）　
REM synchronizeコマンドの後ろにいろんなパラメータを指定できますが、間違えるとサーバー上のものが消えることがありますので、理解して使用する必要があるコマンドです！！！
REM -------------------------------------------------
@set command_synchronize_1= "synchronize local -transfer=binary C:\TEST2\gggg\cmb\data\recivemaster  /gggg/cmb/data/recivemaster"
@set command_synchronize_2= "synchronize local -transfer=binary C:\TEST2\gggg\cmb\data\recivemaster2 /gggg/cmb/data/recivemaster2"

cls
echo ---------------------------------
echo START
echo ---------------------------------

@echo --------------------------------- >> %logfile_main%
REM 開始時刻を出力
@echo %date% %time% >> %logfile_main%

REM 順次にコマンドラインにてコマンドを実行する
%Program% %command_synchronize_1% "close" "exit" >> %logfile_main%
%Program% %command_synchronize_2% "close" "exit" >> %logfile_main%

REM 終了時刻を出力
@echo %date% %time% >> %logfile_main%

echo ---------------------------------
echo ScriptEnd
echo ---------------------------------
REM pause
exit
```

####aimori2@192.168.1.2
WinSCPには、よく利用するサーバーやログイン名などを「セッション」として保存しておく機能があります。保存しておいたセッション名を引数にwinscp.com(winscp.exe)を実行することで、WinSCPを起動してすぐに指定したセッションを呼び出すことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3783/7cdf6897-0512-4f7f-fe48-0e3dc964f15b.png)
(図１）


### スクリプトをbatで出力後、batからスクリプトを実行する例
```bat
@REM
@echo off
REM -------------------------------------------------
REM ログパスを定義する
REM -------------------------------------------------
REM コンソールに出力されたメインのログを保存する（実行結果を確認時に使用）
@set logfile_main=C:\TEST2\logfile_main.log
REM WinSCPが自動的出力された詳細のログを保存する
@set logfile_detail=C:\TEST2\logfile_detail.log
REM 実行対象ファイルを定義
@set WinSCP_scpscript=C:\TEST2\SCPcom.scp
REM 保存済みのセッションにて接続する
@set WinSCP_com="C:\Program Files (x86)\WinSCP\WinSCP.com" aimori2@192.168.1.2

cls
echo ---------------------------------
echo START
echo ---------------------------------
@echo ------------------------------------------------------------------ >> %logfile_main%
REM 開始時刻を出力
@echo %date% %time% >> %logfile_main%

REM # バッチモードに設定し、確認/問い合わせを無効にする
echo option batch on > %WinSCP_scpscript%
REM # ファイル上書きの確認などを無効にする
echo option confirm off >> %WinSCP_scpscript%
REM # バイナリモードに変更
echo option transfer binary >> %WinSCP_scpscript%


REM ------------------------------------------------------------------
REM ここに順番に実際に同期をしたいコマンドを追記する
REM ------------------------------------------------------------------
echo synchronize local -transfer=binary "C:\TEST2\gggg\cmb\data\recivemaster" /gggg/cmb/data/recivemaster >> %WinSCP_scpscript%
echo synchronize local -transfer=binary "C:\TEST2\gggg\cmb\data\recivemaster2" /gggg/cmb/data/recivemaster2 >> %WinSCP_scpscript%
echo synchronize local -transfer=binary "C:\TESTTE ST33" /gggg/cmb/data/recivemaster2 >> %WinSCP_scpscript%

REM ------------------------------------------------------------------
REM #リモートからローカルにファイルをダウンロード
REM ------------------------------------------------------------------
echo get /gggg/cmb/data/recivemaster/XXXAD001_1.txt C:\TEST33\XXXAD001_1_%%TIMESTAMP%%.txt >> %WinSCP_scpscript%


REM ------------------------------------------------------------------
REM # セッションを閉じる
REM ------------------------------------------------------------------
echo close >> %WinSCP_scpscript%

REM ------------------------------------------------------------------
REM # すべてのセッションを閉じプログラムを終了する
REM ------------------------------------------------------------------
echo exit >> %WinSCP_scpscript%

REM ------------------------------------------------------------------
REM スクリプトを実行する
REM ------------------------------------------------------------------
@REM "C:\Program Files\WinSCP\WinSCP.com" /ini="C:\Program Files\WinSCP\WinSCP.ini" [WinSCPName] /console /script=.\%WinSCP_scpscript%
@REM "C:\Program Files (x86)\WinSCP\WinSCP.com" /console /log=C:\TEST2\SCPcom.log /script=C:\TEST2\%WinSCP_scpscript% >> C:\TEST2\1.txt
%WinSCP_com% /console /log=%logfile_detail% /script=%WinSCP_scpscript% >> %logfile_main%

REM 終了時刻を出力
@echo %date% %time% >> %logfile_main%

echo ---------------------------------
echo ScriptEnd
echo ---------------------------------

exit
```


##フォルダ容量が多い場合、下記を参照して、ファイルの圧縮を自動でやります。
Lhaplus を使いDOSコマンドから圧縮する。
Windows のコマンドラインからファイルを圧縮する方法のメモ。
フリーソフトの Lhaplus を使う。

```
>"C:\Program Files\Lhaplus\Lhaplus.exe" /c:zip /o:C:\ "C:\Documents and Settings\user\デスクトップ\test"

/:c 圧縮形式の指定
/:o 出力先の指定

上のコマンドを実行すると、
"C:\Documents and Settings\user\デスクトップ\test" 配下のファイルを、
zip 形式で圧縮し、C:\test.zip で出力される。

```