2016-10-11 121 views
3

我想从Windows服务器到我的FTP执行自动文件传输。Windows批处理文件 - 仅上传最新文件到FTP

问题是该文件的名称中生成了时间戳(名称不固定)。所以我只需要上传文件的最后一个版本(最新版本)。有没有办法如何做到这一点?

在Windows Server 2003下运行。谢谢。

+0

所以你要根据它的名称来选择文件(我们展示了一个例子)或者基于文件的“最后修改”时间戳? –

+0

基于上次修改更好。文件保存为:Volny_sklad_20161010.pdf,Volny_sklad_20161010(1).pdf – whiterabbit

回答

3

要选择Windows批处理文件的最新文件,请参阅
How do I write a Windows batch script to copy the newest file from a directory?

此基础上,你可以创建这样一个批量上传文件:

@echo off 

FOR /F %%I IN ('DIR C:\source\path\*.* /B /O:D') DO SET NEWEST_FILE=%%I 

echo Uploading %NEWEST_FILE% 

(
    echo open ftp.example.com 
    echo username 
    echo password 
    echo put C:\source\path\%NEWEST_FILE% /target/path/%NEWEST_FILE% 
    echo bye 
) > ftp.txt 

ftp.exe -s:ftp.txt 

为了更方便,更可靠的方法,使用一些更强大的第三方FTP客户端。

例如对于WinSCP FTP client,您可以使用其put command-latest switch

一个例子批处理文件(.bat):

winscp.com /ini=nul /command^
    "open ftp://username:[email protected]/"^
    "put -latest C:\source\path\* /target/path/"^
    "exit" 

,你甚至可以有WinSCP generate the script/batch file for you(你只需要手动添加-latest开关)。

参见WinSCP article on Uploading the most recent file

(我的WinSCP的作者)

+0

天才。与WinSCP很好地合作。非常感谢 !最后一个小问题,我可以添加一些命令来删除ftp目录中的所有其他/较旧的文件? – whiterabbit

+1

在'“put ...”行之前加上'“rm/target/path/*”^'。 –

+0

非常感谢! – whiterabbit