windows - 使用 Windows 批处理脚本保护 FTP

标签 windows batch-file ftp sftp

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

如果我想要求安全传输,我的脚本将如何更新?

谢谢。

最佳答案

首先,确保你理解,如果你需要使用Secure 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 的所有功能(特别是 providing commands directly on command-line%TIMESTAMP% syntax ),批处理文件简化为:

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 开关的用途,参见 verifying the host key in script .

比手动组装脚本/批处理文件更容易的是在 WinSCP GUI 中设置和测试连接设置,然后使用它 generate the script or batch file for you :

Generate batch file

您需要调整的只是源文件名(如前所示使用 %TIMESTAMP% 语法)和日志文件的路径。


对于 FTPS,替换 open command 中的 sftp://使用 ftpes:// ( explicit TLS/SSL ) 或 ftps:// ( implicit 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"

如果您的服务器证书是not issued by a trusted authority,您可能需要添加-certificate 开关。 .

同样,与 SFTP 一样,更容易在 WinSCP GUI 中设置和测试连接设置,然后使用它 generate the script or batch file for you .


查看完整的 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 支持 (locale-neutral) timestamp formatting natively .例如,%TIMESTAMP#yyyymmdd% 在任何区域都解析为 20170515

(我是 WinSCP 的作者)

关于windows - 使用 Windows 批处理脚本保护 FTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58334441/

相关文章:

javascript - 有没有办法为 Node.js (npm) 应用程序创建快捷方式桌面?

windows - 为什么 mogrify 将 PNG 大小调整为 50 像素的宽度,而不是批处理文件中指定的 50%?

batch-file - “@echo off”和“@echo%off”之间的区别?

linux - Paramiko sftp put 请求在 python 中被 EOFError() 终止

java - Apache FTP客户端 : 530 You aren't logged in

c - GtkSourceGutter - 如何在特定行上呈现图标或文本

c - 如何在 Windows 中从源代码编译 curl?

php - 通过命令行将 *(mp3、m4p 等)转换为 OGG 以兼容 HTML5

batch-file - 将多个文件夹拖放到bat文件中进行复制

c# - FTPClient如何删除目录?