Как загрузить вчерашний файл в SFTP с помощью файла .bat и WinSCP?

Это мой код, который вчера получил дату сервера.

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set /A "DD=(%dt:~6,2%)-1"
set datestamp=%YYYY%%MM%%DD%
set RunDate=%datestamp%

Однако я пытаюсь добавить это условие в этот синтаксис:

"C:\Program Files (x86)\WinSCP\winscp.com" /console ^
  /command "open sftp://Username:Password]@port" "cd /Dir" "put Dir\.CSV file" pause exit 

Так будет:

C:\Program Files (x86)\WinSCP\winscp.com /console /command 
open sftp://USER:PASS]@IP
cd Dir
@echo off
setlocal
del Dir\Script.txt
echo User>>Dir\Script.txt
echo Pass>>Dir\Script.txt
echo passive>>Dir\Script.txt
echo prompt>>Dir\Script.txt
echo cd Dir>>Dir\Script.txt
echo binary>>Dir\Script.txt 

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do 
set 
"dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set /A "DD=
(%dt:~6,2%)-1"
set datestamp=%YYYY%%MM%%DD%
set RunDate=%datestamp%
echo %RunDate%
echo put Dir_%RunDate%.csv>>Dir\Script.txt

echo close>>Dir\Script.txt


pause 
exit  /b

Я пытаюсь добавить переменную: %RunDate% в любой .csv файл (вчерашняя дата с форматом), чтобы загрузить его в SFTP.


person MerCal    schedule 16.10.2017    source источник
comment
Непонятно, чем ты хочешь заниматься. Вы хотите загрузить все .csv файлы, имена которых включают текущую дату? Т.е. aaa20171016.csv, bbb20171016.csv и т. Д.?   -  person Martin Prikryl    schedule 16.10.2017
comment
Привет, Мартин, спасибо за ответ. Я хочу загрузить один файл со вчерашней датой. Пример файла: Data_Country_20171015.csv.   -  person MerCal    schedule 16.10.2017
comment
Значит, всегда есть только один файл со вчерашней датой?   -  person Martin Prikryl    schedule 16.10.2017


Ответы (2)


Во-первых, ваш код для вычисления вчерашней даты ненадежен. 1-го числа месяца это не сработает. Например, 1 октября он выдаст неверную дату 20171000 вместо правильной 20170930.


На самом деле вы можете легче и надежнее использовать сам WinSCP для вычисления вчерашней даты:

set TIMESTAMP_FORMAT=yyyymmdd
set TIMESTAMP_RELATIVE=-1D

for /F "tokens=* USEBACKQ" %%F in (
  `winscp.com /command "echo %%TIMESTAMP%TIMESTAMP_RELATIVE%#%TIMESTAMP_FORMAT%%%" "exit"`
) do set TIMESTAMP=%%F

echo %TIMESTAMP%

Хотя даже в этом нет необходимости, поскольку WinSCP может загружать вчерашние файлы самостоятельно (используя тот же %TIMESTAMP% синтаксис, как показано выше):

"C:\Program Files (x86)\WinSCP\winscp.com" /command ^
    "open sftp://username:[email protected]/" ^
    "cd /remote/path" ^
    "put *%%TIMESTAMP-1D#yyyymmdd%%*.csv" ^
    "exit"

Это частично основано на статье WinSCP Загрузка самого последнего файла.


Боковые примечания:

person Martin Prikryl    schedule 16.10.2017

Я попробовал это предложение, но не смог интегрировать его в свои коды.

Эта ссылка помогает мне правильно объявить вчерашнюю дату, поскольку вы советуете иметь надежный расчет: Как получить и отобразить вчерашнюю дату?.

Я реализовал то, что значение% AWSDT% заменяется на% RunDate%

person MerCal    schedule 16.10.2017