20

我目前在不同的服务器上有批处理脚本,它们将 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

3 回答 3

36

首先,确保您了解,如果您需要使用安全 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的作者)

于 2013-04-22T16:16:45.380 回答
2

内置的 FTP 命令没有安全功能。请改用cUrl。它是可编写脚本的,更加健壮并且具有 FTP 安全性。

于 2013-04-22T15:09:50.360 回答
-2
    ftps -a -z -e:on -pfxfile:"S-PID.p12" -pfxpwfile:"S-PID.p12.pwd" -user:<S-PID number> -s:script <RemoteServerName> 2121

S-PID.p12 => certificate file name ;
S-PID.p12.pwd => certificate password file name ; 
RemoteServerName =>  abcd123 ; 
2121 => port number ; 
ftps => command is part of ftps client software ; 
于 2016-01-14T16:40:14.360 回答