WinSCPスクリプト
共通
option batch on option confirm on open username:password@servername(:PORTNO) ←(:PORTNO)はデフォルトの場合、省略可。 cd /hoge option transfer binary 取得処理 close exit
スクリプトファイル内のコメント
行頭に「#」
getコマンドの除外
get -filemask=|b.* * C:\Users\hoge\Documents\winscp-test\ ⇒全てのファイルを対象にするが、b.で始まるファイルは除外する a.txt | 55 B | 0.0 KB/s | binary | 100% a.log | 0 B | 0.0 KB/s | binary | 0% get -filemask=|a.* *.log C:\Users\hoge\Documents\winscp-test\ ⇒.logで終わるファイルを対象とし、かつa.*で始まるファイルは除外する b.log | 0 B | 0.0 KB/s | binary | 0% get -filemask="|aaaa0095*;aaaa0096" *.log C:\Users\hoge\Documents\winscp-test\ ⇒aaaa0096,aaaa0097で始まるファイル名以外の.logファイルを取得する aaaa0097.log | 0 B | 0.0 KB/s | binary | 0% get get -filemask="|aaaa0095*;aaaa0096*;bbbb/" * C:\Users\hoge\Documents\winscp-test\ ⇒aaaa0096,aaaa0097で始まるファイル名及びbbbbディレクトリとその配下以外の.logファイルを取得する この場合、bbbbディレクトリ配下に合致するファイルがあったとしても取得されない winscp> ls bbbb -rw-rw-r-- 1 hoge hoge 0 Apr 22 11:04:49 2024 aaaa0096.log drwxrwxr-x 3 hoge hoge 4096 Apr 22 11:05:11 2024 .. drwxrwxr-x 2 hoge hoge 4096 Apr 22 11:04:49 2024 . -rw-rw-r-- 1 hoge hoge 0 Apr 22 11:04:49 2024 aaaa0095.log -rw-rw-r-- 1 hoge hoge 0 Apr 22 11:04:49 2024 aaaa0097.log aaaa0097.log | 0 B | 0.0 KB/s | binary | 0%
getコマンドのファイル格納先にフォルダを指定する場合は最後に「\」で閉じるのを忘れずに
エラーになります。
getの-neweronlyオプションを検証する
getの-latestと-neweronlyはうまく使うと対象のファイルを効率よく取得できそうです。
サーバ上にa.txtとb.txtを作成して状態を変えながら-neweronly付きでgetしてみます。
■初回DL
winscp> get * -neweronly C:\Users\hoge\Documents\winscp-newer\
b.txt | 19 B | 0.0 KB/s | binary | 100%
a.txt | 22 B | 0.0 KB/s | binary | 100%
⇒全てがダウンロードされる
■サーバ上のファイルに変更を加えずにgetする
winscp> get * -neweronly C:\Users\hoge\Documents\winscp-newer\
b.txt | 0 B | 0.0 KB/s | binary | 0%
a.txt | 0 B | 0.0 KB/s | binary | 0%
⇒変更されていないのでダウンロードサイズは0Bとなっており、ダウンロードされない
■a.txtに変更を加えてgetする
winscp> get * -neweronly C:\Users\hoge\Documents\winscp-newer\
b.txt | 0 B | 0.0 KB/s | binary | 0%
a.txt | 43 B | 0.0 KB/s | binary | 100%
⇒a.txtのみダウンロードされる
■b.txtに変更を加えてgetする
winscp> get * -neweronly C:\Users\hoge\Documents\winscp-newer\
a.txt | 0 B | 0.0 KB/s | binary | 0%
b.txt | 55 B | 0.0 KB/s | binary | 100%
⇒b.txtのみダウンロードされる
■サーバからa.txtを削除してgetする
winscp> get * -neweronly C:\Users\hoge\Documents\winscp-newer\
b.txt | 0 B | 0.0 KB/s | binary | 0%
⇒a.txtはダウンロードされないが、ローカルにダウンロードしたa.txtは残る
C:\Users\hoge>dir C:\Users\hoge\Documents\winscp-newer\
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 3E8E-224B です
C:\Users\hoge\Documents\winscp-newer のディレクトリ
2023/12/06 15:40 <DIR> .
2023/12/06 15:40 <DIR> ..
2023/12/06 15:43 43 a.txt
2023/12/06 15:44 55 b.txt
2 個のファイル 98 バイト
2 個のディレクトリ 63,393,484,800 バイトの空き領域
■サーバ上に新たにa.txtを作る
winscp> get * -neweronly C:\Users\hoge\Documents\winscp-newer\
b.txt | 0 B | 0.0 KB/s | binary | 0%
a.txt | 55 B | 0.0 KB/s | binary | 100%
⇒新たにa.txtがダウンロードされ、ローカルのa.txtも更新される
C:\Users\hoge>dir C:\Users\hoge\Documents\winscp-newer\
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 3E8E-224B です
C:\Users\hoge\Documents\winscp-newer のディレクトリ
2023/12/06 15:40 <DIR> .
2023/12/06 15:40 <DIR> ..
2023/12/06 15:48 55 a.txt
2023/12/06 15:44 55 b.txt
2 個のファイル 110 バイト
2 個のディレクトリ 63,391,109,120 バイトの空き領域
■ローカルのb.txtを削除してgetを実行する
winscp> get * -neweronly C:\Users\hoge\Documents\winscp-newer\
b.txt | 55 B | 0.0 KB/s | binary | 100%
a.txt | 0 B | 0.0 KB/s | binary | 0%
⇒b.txtがダウンロードされる
C:\Users\hoge>dir C:\Users\hoge\Documents\winscp-newer\
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 3E8E-224B です
C:\Users\hoge\Documents\winscp-newer のディレクトリ
2023/12/06 17:34 <DIR> .
2023/12/06 17:34 <DIR> ..
2023/12/06 15:48 55 a.txt
2023/12/06 15:44 55 b.txt
2 個のファイル 110 バイト
2 個のディレクトリ 63,173,144,576 バイトの空き領域
現在のセッションを表示
スクリプト起動時には使わないが、テストでステップで実行している時に他のセッションをcloseし忘れていないか確認する時など
session 1 hoge@server01
決め打ちのファイル名を取得
get filename c:\tmp\
昨日日付のタイムスタンプがファイル名についたファイルを取得
get *%TIMESTAMP-1D#yyyymmdd%* c:\tmp\
本日0900-1200台のタイムスタンプがファイル名についたファイルを取得
get *%TIMESTAMP#yyyymmdd%09* c:\tmp\ get *%TIMESTAMP#yyyymmdd%10* c:\tmp\ get *%TIMESTAMP#yyyymmdd%11* c:\tmp\ get *%TIMESTAMP#yyyymmdd%12* c:\tmp\
WinSCPスクリプト内の日付指定
YYYYMMDD %TIMESTAMP#yyyymmdd% YYYYMMDD-1 %TIMESTAMP-1D#yyyymmdd% YYYYMM %TIMESTAMP#yyyymm% YYYYMMDDHH %TIMESTAMP#yyyymmddhh% 例)ファイル名にタイムスタンプがある、実行日13時台のログファイルをすべて取得する get hoge_%TIMESTAMP#yyyymmdd%13*.log C:\temp\ 複数取得の場合はこうかな、まぁ2行にしてもよいけれど。 get hoge_%TIMESTAMP#yyyymmdd%13*.log hoge_%TIMESTAMP#yyyymmdd%14*.log C:\temp\
get -latestを使う
ディレクトリ配下に以下のようなファイルがあったとする 10月 23 13:36 aaa.txt 10月 23 13:35 aaa20231021.txt 10月 23 13:35 aaa20231022.txt 10月 23 13:34 aaa20231023.txt get -latest aaa* C:\Users\hoge\work\ で取得されるファイルは条件にマッチするファイルの中で「タイムスタンプが最新のもの」となる よってこの場合に取得されるファイルはaaa.txtとなる。
/parameter 引数を与えて実行し、引数に与えたwordを含むファイルをDLする
winscp /console /script="\path\to\script.txt" /parameter WORD1 WORD2 WORD3 get *%1%* \path\to\destfolder\ get *%2%* \path\to\destfolder\ get *%3%* \path\to\destfolder\
