使用Windows批处理文件从FTP服务器下载今天的文件

时间:2017-06-20 21:37:07

标签: windows batch-file ftp timestamp

我正在尝试将XML文件从FTP位置复制到应用程序服务器 - 但不是所有文件。每隔半小时在ftp位置存档新文件。我需要根据时间戳和日期仅传输新文件。

我目前正在使用以下2个文件从FTP位置复制所有文件。

批处理文件:

ftp -i -s:D:\ftp_commands.txt -n <host name>

文本文件(ftp_commands.txt):

user <username> <password>
cd <source path>
lcd <destination path>
mget *
bye

有人可以帮我复制基于时间戳或日期的文件吗?

2 个答案:

答案 0 :(得分:3)

使用Windows批处理文件和内置FTP客户端(ftp.exe)实现这是一项相当复杂的任务。

使用PowerShell或其他更强大的语言会更容易。

使用功能更强大的FTP客户端更容易。

例如WinSCP FTP client支持时间限制。

使用WinSCP,今天下载的批处理文件的文件非常简单:

winscp.com /ini=nul /log=todays.log /command ^
    "open ftp://username:password@ftp.example.com/" ^
    "get /remote/path/*>=%%TIMESTAMP#yyyy-mm-dd%% C:\local\path\" ^
    "exit"

使用WinSCP 5.13及更新版本,语法更加简单:

    "get /remote/path/*>=today C:\local\path\" ^

这使用%TIMESTAMP% syntaxfile mask with a time-constraint

另见:

(我是WinSCP的作者)

答案 1 :(得分:1)

正如用户Martin Prikrylcomment中指出的那样, 可以使用Windows的本机FTP命令ftp.exe来实现您的目标,尽管它可能会不那么容易。所以我不得不接受挑战......

这是一个下载给定数量的最新(最新)文件的脚本。可以修改此值以考虑时间戳而不是计数,但由于日期/时间格式可能取决于FTP主机和/或本地计算机,因此我不知道在执行FTP命令时您接收的格式是什么{{ 1}},我决定首先考虑计数。所以这就是:

dir