在批处理文件中只将最新文件放入SFTP服务器

时间:2017-05-05 01:44:53

标签: batch-file sftp

我有一个ETL(SSIS)作业,它在将文件发送到SFTP服务器之前在名为TEST_20170505.csv的文件夹中创建一个文件。

文件夹中会有多个文件,例如TEST_20170504.csvTEST_20170503.csv。目前,我在批处理文件中使用了以下sftp脚本文件(File.txt)。

lcd E:\localpath\
cd \sftpserverpath\
ascii
put *.csv
bye

这是我的.bat文件。

sftp -oIdentityFile=E:\sftp\filepath\ssh.ppk -B E:\sftp\filepath\File.txt username@ipaddress

但是这会将本地路径中的所有文件上传到SFTP服务器,而不是采用最新/上次修改/当前日期文件。

2 个答案:

答案 0 :(得分:1)

OpenSSH sftp不能单独执行此操作。但是您可以使用一些花哨的批处理文件构造来选择最新文件,然后生成临时sftp上传脚本。

一些参考文献:

或者使用一些更高级的Windows命令行SFTP客户端。

例如使用WinSCP scripting,就像使用-latest switch in the put command一样简单:

open sftp://username@example.com/ -privatekey=ssh.ppk
lcd E:\localpath\
cd \sftpserverpath\
ascii
put -transfer=ascii -latest *.csv
exit

运行脚本(upload.txt),如:

winscp.com /script=upload.txt /ini=nul /log=upload.log

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

参考文献:

请注意,WinSCP使用.ppk格式的私钥文件。虽然OpenSSH sftp使用PEM格式。即使您的密钥文件名为.ppk,也不能是真正的.ppk文件,否则sftp会拒绝它。您可能已将原始.ppk文件转换为PEM,但错误地保留了原始扩展名。您必须将原始.ppk文件与WinSCP一起使用(如果您没有,可以使用PuTTYgen将PEM转换回.ppk)。

另请注意,WinSCP实际上支持text / ascii模式(-transfer=ascii),而sftp没有(没有ascii命令)。

(我是WinSCP的作者)

答案 1 :(得分:0)

解决方案不是在脚本文件中输入“ * .csv”,而是指定要上传的实际文件名