请注意此屏幕以更好地了解我们的要求:
我们希望自动化文本数据源生成和MS Excel连接,以便最终用户更轻松地将文本数据源(CSV)连接到MS Excel,以便他们可以生成自己的报告。
我想到的步骤:
使用带脚本的WinSCP FTP客户端
编写脚本以从FTP文件夹中获取最新的更新文件
或者代替第2步,将所有生成的文件从FTP下载到网络上的共享文件夹。
获取最新版本的“生成的CSV文件”
将文件重命名为标准命名约定。这必须是MS Excel中用作CSV文本数据源的名称。
删除所有其他文件
我开发了可以由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
上面的示例工作正常,但主要问题是如何识别最新文件,以便我可以重命名它,并删除所有其他文件。
感谢您的帮助。
塔雷克
答案 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