我有一个批处理文件,用于从我的网络服务器FTPs CSV文件。 我只需要下载最新的CSV文件。
我该怎么做?
这是我到目前为止所做的:
open 44.44.44.444
username
password
CD /Client/ABCCompany/
get *.csv
quit
close()
感谢。
答案 0 :(得分:5)
使用ftp.exe
选择最新文件并不容易。
如果您知道该文件的文件名中包含今天的时间戳,您可以使用今天的时间戳动态生成脚本。您可以使用DATE
环境变量,尽管它有其警告。更可靠(也更复杂)的方法是使用wmic os get LocalDateTime
。
如果您可以按字母顺序确定最新文件,则可以:
ftp.exe
并将ls
命令重定向到文件ftp.exe
运行生成下载脚本。 WinSCP可以使用get
command的-latest
开关下载最新文件:
winscp.com /command ^
"open ftp://username:password@ftp.example.com/" ^
"cd /remote/path" ^
"get -latest *.csv" ^
"exit"
WinSCP还可以下载创建的文件within some interval,例如过去24小时(1天):
winscp.com /command ^
"open ftp://username:password@ftp.example.com/" ^
"cd /remote/path" ^
"get *.csv>=1D" ^
"exit"
或从某个时间点创建的文件,例如要下载自午夜以来创建的文件,请使用today
keyword:
winscp.com /command ^
"open ftp://username:password@ftp.example.com/" ^
"cd /remote/path" ^
"get *.csv>=today" ^
"exit"
WinSCP 5.15及更新版本支持today
关键字。在旧版本中,请使用%TIMESTAMP%
syntax,而不是%%TIMESTAMP#yyyy-mm-dd%%
,而不是today
。
使用WinSCP,您可以比使用DATE
或wmic os get LocalDateTime
(如上所示)更轻松地下载文件名时间戳的文件。再次使用%TIMESTAMP%
语法:
winscp.com /command ^
"open ftp://username:password@ftp.example.com/" ^
"cd /remote/path" ^
"get %%TIMESTAMP#yyyy-mm-dd%%.txt" ^
"exit"
(我是WinSCP的作者)
答案 1 :(得分:0)
您很可能需要分两部分进行转移。第一个发出DIR命令,它应该将最新的文件作为最后一个。解析出DIR输出中的最后一个文件名后,使用该文件名进行后续GET。
我在C#中做了类似的事情。
答案 2 :(得分:0)
执行此操作的简单方法是将其拆分为两个单独的连接,并在FTP位置包含一个文本文件,其中包含最新文件的名称。
open 44.44.44.444
username
password
CD /Client/ABCCompany/
get latestfile.txt
quit
close()
latestfile.txt将包含您需要下载的最新文件的名称。 第二个脚本将读取latestfile.txt中的文本并仅拉取该文件。
for /F "tokens=*" %%A in (latestfile.txt) do [SET FILE = %%A]
您必须将上述行添加到调用辅助FTP脚本的批处理文件中。
open 44.44.44.444
username
password
CD /Client/ABCCompany/
get %FILE%
quit
close()
答案 3 :(得分:0)
我反复需要从生产环境中下载备份文件,以便在开发环境中进行安装。
在本例中,我要为其自动下载文件的文件名中指定了日期:backup_2018_08_03_020003_1048387.bak
因此我们可以在命令行ftp会话中使用mget *2018_08_03*
来获取文件。
我们的备份过程每天早上01:00 AM运行,因此我们每天都有一个可以提取的备份。
当然,有一个脚本可以根据备份文件的时间戳来获取最新的备份文件,这是更好,更好的选择,以防万一最新备份或备份文件命名格式出了问题。该脚本只是为了内部开发目的而获取备份的脚本,因此,如果损坏,则没什么大不了的。稍后,我将进行调查,并检查是否可以提供更清洁的解决方案。
我制作了一个批处理脚本,该脚本只使用普通的ftp命令提示符脚本来要求提供今天的备份文件。
正确设置今天的日期格式很重要。它必须正确匹配文件名中日期的格式。
如果要使用脚本,则应使用自己的信息替换变量。您还应该对运行它的目录具有写访问权。
这是我制作的脚本:
@Echo Off
Set _FTPServerName=xxx.xxx.xx.xxx
Set _UserName=Username
Set _Password=Password
Set _LocalFolder=C:\Temp
Set _RemoteFolder="/path/"
Set _Filename=*%date:~-4,4%_%date:~-7,2%_%date:~-10,2%*
Set _ScriptFile=ftptempscript
:: Create script
>"%_ScriptFile%" Echo open %_FTPServerName%
>>"%_ScriptFile%" Echo %_UserName%
>>"%_ScriptFile%" Echo %_Password%
>>"%_ScriptFile%" Echo lcd %_LocalFolder%
>>"%_ScriptFile%" Echo cd %_RemoteFolder%
>>"%_ScriptFile%" Echo binary
>>"%_ScriptFile%" Echo mget -i %_Filename%
>>"%_ScriptFile%" Echo quit
:: Run script
ftp -s:"%_ScriptFile%"
del "%_ScriptFile%"