如何使用.bat文件和WinSCP将昨天文件上传到SFTP?

时间:2017-10-16 07:59:26

标签: batch-file file-upload ftp sftp 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。

2 个答案:

答案 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:password@example.com/" ^
    "cd /remote/path" ^
    "put *%%TIMESTAMP-1D#yyyymmdd%%*.csv" ^
    "exit"

部分基于WinSCP文章Uploading the most recent file

附注:

答案 1 :(得分:0)

我尝试了这个建议,但是我没能把它整合到我的代码中。

此链接可帮助我正确声明昨天的日期,因为您建议进行可靠的计算:How to get and display yesterday date?

我实施的是%AWSDT%的值被%RunDate%

替换