2017-10-16 626 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

首先,你的代碼來計算昨天的日期是不可靠的。它不會在一個月的第一天工作。例如在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" 

這是部分基地d在WinSCP文章Uploading the most recent file上。


旁註:

0

我試過了這個建議,但是我沒有把它整合到我的代碼中。

此鏈接可幫助我正確聲明昨天的日期,因爲您建議有一個可靠的計算:How to get and display yesterday date?

我幹了什麼工具是的%AWSDT%的價值是由%RunDate%取代