Batch/Macro code to get latest file from FTP site

久未见 提交于 2021-02-04 19:58:38

问题


We have a shared FTP site with a daily file upload which I need to download and run checks over. I'm simply trying to automate the process. The FTP file is something like name_20150901.xml.

So far I have a batch file to get the file but I can't figure out how to get the latest. Here is my code:

@ftp -i -s:"%~f0"&GOTO:EOF
open ftp.site.com
<user>
<pass>
lcd my local direc
binary
get todaysfile_20150901.xml

What changes do I need to read the files and get the newest one? My end goal is to have a macro that calls this and then reads the file that's grabbed from the FTP and runs my checks.


回答1:


There's no easy way to select the most recent file with the ftp.exe.

  • If you know that the file has today's timestamp, you can generate the script dynamically with the today's timestamp. You can use the DATE environment variable, though it has its caveats. A more reliable (and complex) way is to use the wmic os get LocalDateTime.

    See How to get current datetime on Windows command line, in a suitable format for using in a filename?

  • If you can determine the latest file alphabetically, you can:

    • run the ftp.exe with the ls command redirected to a file
    • sort the files by alphabet in a descending order
    • read the first line
    • generate a download script for the second ftp.exe run
  • WinSCP can download the files created within the last 24-hours (1 day):

    winscp.com /command ^
        "open ftp://user:pass@ftp.site.com/" ^
        "lcd c:\my\local\direc" ^
        "get *>=1D" ^
        "exit"
    
  • If you really need to download the latest file (by timestamp), you probably need some more advanced scripting.

    For example there's a guide available for downloading the most recent file with WinSCP.

    (I'm the author of WinSCP)



来源:https://stackoverflow.com/questions/32353408/batch-macro-code-to-get-latest-file-from-ftp-site

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!