如何使用.bat文件和WinSCP将昨天的文件上传到SFTP?
问题描述:
这是我的代码昨天得到服务器日期。如何使用.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。
答
首先,你的代码来计算昨天的日期是不可靠的。它不会在一个月的第一天工作。例如在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上。
旁注:
- 的WinSCP没有任何
pause
命令。您可能需要添加-hostkey
switch to theopen
command to make the script portable。
答
我试过了这个建议,但是我没有把它整合到我的代码中。
此链接可帮助我正确声明昨天的日期,因为您建议有一个可靠的计算:How to get and display yesterday date?。
我干了什么工具是的%AWSDT%的价值是由%RunDate%取代
目前尚不清楚,你想做的事。你想上传所有'.csv'文件哪些文件名包括当前日期?即'aaa20171016.csv','bbb20171016.csv'等? –
嗨马丁, 感谢您的答复。我想上传一个具有昨天日期值的文件。示例文件名:Data_Country_20171015.csv。 – MerCal
因此,昨天的日期总是只有一个文件? –