2017-10-16 24 views
1

어제 서버 날짜를 얻는 코드입니다..bat 파일과 WinSCP를 사용하여 SFTP에 어제 파일을 업로드하는 방법은 무엇입니까?

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에 업로드하려고합니다.

+0

그것은 분명하지 않다, 당신이 원하는 무엇을. 파일 이름에 현재 날짜가 포함 된 모든 .csv 파일을 업로드 하시겠습니까? 나는. 'aaa20171016.csv','bbb20171016.csv' 등? –

+0

안녕 마틴, 답장을 보내 주셔서 감사합니다. 어제 날짜 값이있는 파일 하나를 업로드하고 싶습니다. 예제 파일 이름 : Data_Country_20171015.csv. – MerCal

+0

어제 날짜가 항상 하나 뿐인 파일이 있습니까? –

답변

1

첫째, 어제 날짜를 계산하는 코드는 신뢰할 수 없습니다. 한 달에 1 일에 작동하지 않습니다. 예를 들어 10 월 1 일에 올바르지 않은 날짜 20171000이 올바른 20170930 대신 생성됩니다.


할 수 있습니다 실제로 use WinSCP itself to calculate the yesterday date 방법이 더 쉽고 주로 신뢰성 :

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% syntax이를 이용한 (자체 어제 파일을 업로드 할 수 심지어는 실제로 필요하지 않지만 위에 표시된대로) :

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

이것은 부분적으로 기본입니다 WinSCP 문서 Uploading the most recent file에 d.


사이드 노트 :

0

제안을 시도했지만 코드에 통합하지 못했습니다.

이 링크는 신뢰할 수있는 계산 방법을 제공하기 위해 어제 날짜를 올바르게 선언하는 데 도움이됩니다 : How to get and display yesterday date?. 내가 구현 했는가

는 %의 AWSDT의 %의 값이 %의 RunDate의 %에 의해 대체되고 있다는 점이다