如何从 FTP 下载今天和昨天的较新数据?

How to download newer data today and yesterday from FTP?

我想从我的 FTP 文件中下载较新的数据,其中包含昨天和今天的变量,结构文件如下

Daily_(City)_(yyyymmdd).xlsx

我试过这个代码

daily.bat

winscp.exe /console /script=daily.txt

daily.txt

::: Begin set date

for /f "tokens=1-4 delims=/-. " %%i in ('date /t') do (call :set_date %%i %%j %%k %%l)
goto :end_set_date

:set_date
if "%1:~0,1%" gtr "9" shift
for /f "skip=1 tokens=2-4 delims=(-)" %%m in ('echo,^|date') do (set %%m=%1&set %%n=%2&set %%o=%3)
goto :eof

:end_set_date
::: End set date

set /a today=%dd%
set /a yesterday=%dd%-1

@echo off
open Reg_8@192.168.8.1  
get -neweronly "/Reg8/Kota/2016/Daily/Daily_Makassar_%yy%%mm%%today%.xlsx" "D:\FTP\Makassar16\daily"
get -neweronly "/Reg8/Kota/2016/Daily/Daily_Makassar_%yy%%mm%%yesterday%.xlsx" "D:\FTP\Makassar16\daily"
pause

如果我运行这个脚本不会发生...

您正在将 Windows 和 WinSCP 命令合并到一个文件中。那是不可能的。从阅读 guide to automating file transfers from FTP server or SFTP server.

开始

而且你的脚本太复杂了,因为你没有利用WinSCP %TIMESTAMP% syntax


一个简单的方法(daily.txt):

open ftp://user:mypassword@ftp.example.com/
get -neweronly "/Reg8/Kota/2016/Daily/Daily_Makassar_%TIMESTAMP#yyyymmdd%.xlsx" "D:\FTP\Makassar16\daily"
get -neweronly "/Reg8/Kota/2016/Daily/Daily_Makassar_%TIMESTAMP-1D#yyyymmdd%.xlsx" "D:\FTP\Makassar16\daily"

(只有这个,丢弃您 daily.txt 中的所有其他代码)

%TIMESTAMP#yyyymmdd% 将解析为 20161006
%TIMESTAMP-1D#yyyymmdd% 将解析为 20161005(截至 2016 年 10 月 6 日)。

为此您需要 WinSCP 5.9 及更新版本。


一般来说,您应该从批处理文件中调用 winscp.com,而不是 winscp.exe /console