Как загрузить последний измененный файл с удаленного сервера на локальный, используя пакетный файл PuTTY

У меня есть вопрос, касающийся пакетного файла замазки. Это мое .bat файл:

C:
cd Program Files (x86)\PuTTY
pscp -2 -v -pw khair1 -sftp  abc@****.na.ab.com:/qwe/asd/tryu/*.csv.zip P:\Projects\abc\Test_bacth\Batch_download
pause"

Таким образом, каждую неделю я должен дать имя файла, как /qwe/asd/tryu/**04242016***.csv.zip

Как я могу динамически получить все файлы, которые были изменены в последний раз.

1 ответ

Решение

Вы можете использовать эти команды для создания сегодняшнего штампа:

for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set LDT=%%j
set STAMP=%LDT:~0,4%%LDT:~4,2%%LDT:~6,2%
echo %STAMP%

См. Как получить текущую дату и время в командной строке Windows, в подходящем формате для использования в имени файла?


Или используйте более мощный SFTP/SCP-клиент.

Например, с помощью сценариев WinSCP вы можете сделать:

"C:\Program Files (x86)\WinSCP\WinSCP.com" /command ^
    "open sftp://abc:password@****.na.ab.com/ -hostkey=""ssh-dss 1024 xx:xx:xx:...""" ^
    "get /qwe/asd/tryu/%%TIMESTAMP#yyyymmdd%%*.csv.zip ""P:\Projects\abc\Test_bacth\Batch download\""" ^
    "exit"

Смотрите документацию для %TIMESTAMP% синтаксис


Если временная метка на самом деле не сегодняшняя, вместо указания временной метки просто загрузите последний файл для каждого шаблона / маски.

Это легко с WinSCP 5.8 и более поздними версиями (в настоящее время бета), просто используйте -latest переключатель:

"C:\Program Files (x86)\WinSCP\WinSCP.com" /command ^
    "open sftp://abc:password@****.na.ab.com/ -hostkey=""ssh-dss 1024 xx:xx:xx:...""" ^
    "lcd ""P:\Projects\abc\Test_bacth\Batch download""" ^
    "cd /qwe/asd/tryu" ^
    "get -latest *_cpg_aob_detail.csv.zip" ^
    "get -latest *_fmcg_cob_detail.csv.zip" ^
    ...
    "exit"

Смотрите также другие варианты загрузки самых последних файлов.

(Я автор WinSCP)

Другие вопросы по тегам