2022-03-15に更新

WinSCPのコマンドを使ったbatでファイルを取得するサンプル

WinSCPのコマンドを使って、ファイルを取得するbatのサンプルは下記。

目的:
指定した日付以降のファイルをダウンロードしたい

引数:
1.パスワード
2.IPアドレス(IPアドレスが固定じゃない場合用)
3.目的の「指定した日付」に該当する年月日(フォーマット:MM/DD/YY)

rem 引数の設定
set password=%1
set addr=%2
set date=%3

rem 保存したセッション情報を使用する場合
rem set remoteSession="保存したセッション名"

rem 実行ファイル
set WinSCP="実行ファイルパス\WinSCP.com"

rem 実行するスクリプト
set scriptFile="スクリプトファイルパス\scriptFile.txt"

rem ダウンロード用フォルダ
set downloadFolder=ダウンロードフォルダパス

rem ダウンロード用一時フォルダ
set tempFolder=temp
set tempPath=%downloadFolder%%tempFolder%\

cd /d %downloadFolder%

rem 一時フォルダがない場合は作成する
if not exist %tempFolder% mkdir %tempFolder%

rem 保存したセッション情報を使用する場合
rem echo open %remoteSession% > %scriptFile%

rem SCPでセッションopen
echo open scp://ユーザー名:%password%@%addr%:22 > %scriptFile%

echo cd ダウンロードするファイルパス >> %scriptFile%

rem バイナリモードに変更
echo option transfer binary

rem ダウンロード
echo get ./* %tempPath%  >> %scriptFile%

rem セッションクローズ
echo close >> %scriptFile%

rem WinSCPのコンソールをclose
echo exit >> %scriptFile%

rem スクリプトファイルを実行
@%WinSCP% /script=%scriptFile%

rem xcopyで対象日付以降のファイルをダウンロードフォルダに移動
xcopy /Y /D:%date% %tempPath%\* %downloadFolder%

rem 一時フォルダを削除
rmdir /s /q %tempFolder%

cd ../

callコマンドで、findを使った指定した更新日付以降の取得結果を絞り込めるかと思ったけれど、下記のようにした場合、【get 抽出したファイルのダウンロード】の部分は、callで実行されるリモート側のシェルコマンド扱いなので、get をWinSCPのコマンドとして認識してくれない。当然かもしれないけれど。

call 【指定した更新日付以降のファイルの抽出】 | 【get 抽出したファイルのダウンロード】

そうすると、ファイルを選別してダウンロードするためには、以下の方法になりそう。

1.callでダウンロードファイルを選別して、リネーム、もしくは一時ディレクトリにコピーしてからgetでダウンロード。ダウンロード後に一時ディレクトリは削除。

2.ダウンロード後にファイルを選別し、不要なファイルを削除。

上記だと2.の手段のほうが、リモートファイルを操作しないから安全かも。
他に方法あるのかなぁ。

ツイッターでシェア
みんなに共有、忘れないようにメモ

ao-iro

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント