从FTP文件夹获取最新的更新文件

时间:2014-10-25 12:10:42

标签: csv ftp datasource winscp

请注意此屏幕以更好地了解我们的要求:

https://www.screenr.com/QmDN

我们希望自动化文本数据源生成和MS Excel连接,以便最终用户更轻松地将文本数据源(CSV)连接到MS Excel,以便他们可以生成自己的报告。

我想到的步骤:

  1. 使用带脚本的WinSCP FTP客户端

  2. 编写脚本以从FTP文件夹中获取最新的更新文件

  3. 或者代替第2步,将所有生成的文件从FTP下载到网络上的共享文件夹。

  4. 获取最新版本的“生成的CSV文件”

  5. 将文件重命名为标准命名约定。这必须是MS Excel中用作CSV文本数据源的名称。

  6. 删除所有其他文件

  7. 我开发了可以由WinSCP用于从FTP文件夹下载文件的示例脚本:

    # Automatically abort script on errors
    option batch abort
    # Disable overwrite confirmations that conflict with the previous
    option confirm off
    # Connect
    open CSOD
    # Change remote directory
    cd /Reports/CAD
    # Force binary mode transfer
    option transfer binary
    # Download file to the local directory d:\
    #get "Training Attendance Data - Tarek_22_10_21_2014_05_05.CSV" "D:\MyData\Business\Talent Management System\Reports\WinCSP\"
    get "*.CSV" "D:\MyData\Business\Talent Management System\Reports\WinCSP\Files\"
    # Disconnect
    close
    exit
    

    然后,我可以使用以下命令安排上述代码定期运行:

    winscp.com /script=example.txt
    

    上面的示例工作正常,但主要问题是如何识别最新文件,以便我可以重命名它,并删除所有其他文件。

    感谢您的帮助。

    塔雷克

2 个答案:

答案 0 :(得分:3)

只需将-latest开关添加到get command

即可
get -latest "*.CSV" "D:\MyData\Business\Talent Management System\Reports\WinCSP\Files\"

有关详细信息,请参阅WinSCP文章Downloading the most recent file

答案 1 :(得分:0)

您没有指定您使用的语言,这里是一个下载最新FTP路径文件的Ruby脚本。只是为了演示使用像Ruby这样的脚本语言可以做到多么容易和简洁。

require 'net/ftp'

Net::FTP.open('url of ftpsite') do |ftp|
  ftp.login("username", "password")
  path = "/private/transfer/*.*"
  # file[55..-1] gives the filename part of the returned string
  most_recent_file = ftp.list(path)[2..-1].sort_by {|file|ftp.mtime(file[55..-1])}.reverse.first[55..-1]
  puts "downloading #{most_recent_file}"
  ftp.getbinaryfile(most_recent_file, File.basename(most_recent_file))
  puts "done"
end