我目前在不同的服务器上有批处理脚本,它们将csv文件传输到不同位置的FTP服务器。我的脚本类似于以下内容:
echo user ftp_user> ftpcmd.dat
echo password>> ftpcmd.dat
echo put c:\directory\%1-export-%date%.csv>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftp.MyFTPSite.com
del ftpcmd.dat
字符串
如果我想要求安全传输,我的脚本将如何更新?
谢谢.
4条答案
按热度按时间lqfhib0f1#
首先,请确保您理解,如果您需要使用Secure FTP(=FTPS,根据您的文本)或SFTP(根据您使用的标签)。
Windows命令行
ftp.exe
都不支持。正如你所建议的,你可以使用WinSCP。它支持FTPS和SFTP。使用WinSCP,您的批处理文件将如下所示(对于SFTP):
字符串
批处理文件:
型
虽然使用了WinSCP的所有功能(特别是直接在命令行和
%TIMESTAMP%
语法上提供命令),但批处理文件简化为:型
有关
-hostkey
开关的用途,请参阅在脚本中验证主机密钥。比手动组装脚本/批处理文件更简单的是在WinSCP GUI中设置和测试连接设置,然后让它为您生成脚本或批处理文件:
x1c 0d1x的数据
您只需要调整源文件名(使用前面所示的
%TIMESTAMP%
语法)和日志文件的路径。对于FTPS,将
open
command中的sftp://
替换为ftpes://
(显式TLS/SSL)或ftps://
(隐式TLS/SSL)。并删除-hostkey
开关。型
如果您的服务器证书不是由可信机构颁发的,则可能需要添加
-certificate
开关。同样,与SFTP一样,在WinSCP GUI中设置和测试连接设置更容易,然后让它为您生成脚本或批处理文件。
查看完整的conversion guide from
ftp.exe
to WinSCP。你也应该阅读Guide to automating file transfers to FTP server or SFTP server。
注意使用
%TIMESTAMP#yyyymmdd%
而不是%date%
:%date%
变量值的格式是特定于区域设置的。因此,请确保在实际使用脚本的同一区域设置上测试脚本。例如,在我的捷克区域设置中,%date%
解析为čt 06. 11. 2014
,当用作文件名的一部分时可能会出现问题。出于这个原因,WinSCP支持本地(与区域无关)时间戳格式化。例如,
%TIMESTAMP#yyyymmdd%
在任何区域都解析为20170515
。3bygqnnd2#
内置的FTP命令没有安全功能。请使用cUrl。它是可脚本化的,更健壮,并且具有FTP安全性。
owfi6suc3#
PowerShell中的一个小代码片段,用于在WinSCP未在路径中注册但winscp.exe可用时简化调用(默认值指向
Install-Module WinSCP
目录):字符串
使用方法:
型
使用此函数和sftp的原始帖子答案(我的用例):
Send-WinScpCommand "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv"
根据@Stephan的要求,批次等效物:
型
使用方法:
型
o2rvlv0m4#
字符串