首先,确保您了解,如果您需要使用安全 FTP(=FTPS,根据您的文本)或SFTP(根据您使用的标签)。
Windows 命令行都不支持ftp.exe
。正如您所建议的,您可以使用WinSCP。它同时支持 FTPS 和 SFTP。
使用 WinSCP,您的批处理文件将如下所示(对于 SFTP):
echo open sftp://ftp_user:password@ftp.MyFTPSite.com -hostkey="..." >> ftpcmd.dat
echo put c:\directory\%1-export-%date%.csv >> ftpcmd.dat
echo exit >> ftpcmd.dat
winscp.com /script=ftpcmd.dat
del ftpcmd.dat
和批处理文件:
winscp.com /log=ftpcmd.log /script=ftpcmd.dat /parameter %1 %date%
尽管使用了 WinSCP 的所有功能(特别是直接在命令行和%TIMESTAMP%
语法上提供命令),但批处理文件简化为:
winscp.com /log=ftpcmd.log /command ^
"open sftp://ftp_user:password@ftp.MyFTPSite.com -hostkey=""...""" ^
"put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
"exit"
有关-hostkey
切换的目的,请参阅验证脚本中的主机密钥。
比手动组装脚本/批处理文件更容易的是在 WinSCP GUI 中设置和测试连接设置,然后让它为您生成脚本或批处理文件:
您需要调整的只是源文件名(使用%TIMESTAMP%
前面显示的语法)和日志文件的路径。
对于 FTPS,将sftp://
命令中的open
替换为ftpes://
(显式 TLS/SSL)或ftps://
(隐式 TLS/SSL)。拆下-hostkey
开关。
winscp.com /log=ftpcmd.log /command ^
"open ftps://ftp_user:password@ftp.MyFTPSite.com -explicit" ^
"put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
"exit"
如果您的服务器证书不是由受信任的机构颁发的,您可能需要添加-certificate
开关。
同样,与 SFTP 一样,更简单的是在 WinSCP GUI 中设置和测试连接设置,然后让它为您生成脚本或批处理文件。
请参阅从WinSCP 到完整的转换指南ftp.exe
。
您还应该阅读将文件自动传输到 FTP 服务器或 SFTP 服务器的指南。
%TIMESTAMP#yyyymmdd%
使用代替的注意事项%date%
:变量值的格式%date%
是特定于语言环境的。因此,请确保在您实际使用脚本的同一语言环境中测试脚本。例如,在我的捷克语言环境中,%date%
解析为čt 06. 11. 2014
,当用作文件名的一部分时可能会出现问题。
出于这个原因,WinSCP 原生支持(与区域设置无关的)时间戳格式。例如%TIMESTAMP#yyyymmdd%
解析到20170515
任何语言环境。
(我是WinSCP的作者)