Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Windows批处理脚本保护FTP_Windows_Batch File_Ftp_Sftp - Fatal编程技术网

使用Windows批处理脚本保护FTP

使用Windows批处理脚本保护FTP,windows,batch-file,ftp,sftp,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 de

我目前在不同的服务器上有批处理脚本,可以将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
如果我想要求安全传输,我的脚本将如何更新


谢谢。

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

首先,如果需要使用(=FTPS,根据您的文本)或(根据您使用的标签),请确保您理解

Windows命令行
ftp.exe
都不支持这两种方法。正如您所建议的,您可以使用。它支持FTP和SFTP

使用WinSCP,批处理文件如下所示(对于SFTP):

和批处理文件:

winscp.com /log=ftpcmd.log /script=ftpcmd.dat /parameter %1 %date%

尽管使用了WinSCP的所有功能(尤其是和),批处理文件简化为:

winscp.com /log=ftpcmd.log /command ^
    "open sftp://ftp_user:password@ftp.MyFTPSite.com -hostkey=""server's hostkey""" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"
有关
-hostkey
开关的用途,请参阅

比手动组装脚本/批处理文件更容易的是在WinSCP GUI中设置和测试连接设置,然后让它:

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


对于FTP,将中的
sftp://
替换为
ftpes://
()或
FTPS://
()。卸下
-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中设置和测试连接设置,然后进行测试


看一个完整的例子

你也应该读一下


注意使用
%TIMESTAMP#yyyymmdd%
代替
%date%
:变量值的格式是特定于语言环境的。因此,请确保在实际使用脚本的同一语言环境中测试脚本。例如,在我的捷克语言环境中,
%date%
解析为
čt 06。112014
,当用作文件名的一部分时可能会出现问题

因此,WinSCP支持。例如,
%TIMESTAMP#yyyymmdd%
在任何语言环境下解析为
20170515

(我是WinSCP的作者)

ftps-a-z-e:on-pfxfile:“S-PID.p12”-pfxpwfile:“S-PID.p12.pwd”-用户:-S:script 2121
S-PID.p12=>证书文件名;
S-PID.p12.pwd=>证书密码文件名;
RemoteServerName=>abcd123;
2121=>端口号;
ftps=>命令是ftps客户端软件的一部分;

WinSCP是否也是一个足够的替代品?您好,请尝试为您的代码提供一些上下文,例如它正在做什么以及您建议OP使用什么软件。
winscp.com /log=ftpcmd.log /command ^
    "open ftps://ftp_user:password@ftp.MyFTPSite.com -explicit" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"
    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 ;