我从几个帖子中搜索到找到这个问题的解决方案,但无法找到它。我想构建一个批处理文件,该文件转到FTP上的文件夹,然后下载所有记录,然后删除所有记录。
到目前为止,我尝试使用命令" mdel 。",请参阅以下代码:
@echo off
echo user ftpUser> ftpcmd.dat
echo Password>> ftpcmd.dat
echo cd /tst/>>ftpcmd.dat
echo binary>> ftpcmd.dat
echo prompt n>> ftpcmd.dat
echo mget *.*>> ftpcmd.dat
echo mdel *.*>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat 77.99.999.999
del ftpcmd.dat
对于这个解决方案,我注意到如果我使用命令"删除"并指定它工作的文件。像这样: echo delete 312312312.csv>> ftpcmd.dat
但由于某些原因使用mdel(如示例),它没有。
你知道更好的方法吗?
由于
答案 0 :(得分:1)
mdel
命令需要列出远程目录中的文件。问题是Windows内置ftp.exe
仅支持FTP活动模式。在此模式下,服务器需要打开与您的计算机的传入连接,传输列表,默认情况下由Windows防火墙或您和服务器之间的路径上的任何其他防火墙/代理/ NAT阻止。这使得ftp.exe
现在最无用。
有关详细信息,请参阅我的文章network configuration for FTP active mode。
使用任何其他第三方FTP客户端。大多数人支持没有这类问题的被动模式。
正如您自己发现的那样,一个这样的客户是WinSCP。
使用WinSCP scripting,您的批处理文件就像:
@echo off
winscp.com /log=ftp.log /command ^
"open ftp://ftpUser:Password@77.99.999.999/" ^
"cd /tst" ^
"get *" ^
"rm *" ^
"exit"
但是,如果服务器支持,请考虑使用secure FTP over TLS/SSL,将ftp://
替换为ftpes://
。
另见converting Windows FTP script to WinSCP script指南。
(我是WinSCP的作者)
答案 1 :(得分:0)
我找到了解决此问题的方法: http://winscp.net/eng/docs/scriptcommand_rm#examples
使用这个软件,我能够同时获取和删除多个文件,现在代码如下: 选项批量中止 选项确认关闭
open ftp://user:Password@77.XX.XXX.XXX
cd /tst/
get *.* d:\www\*.bak
rm *.*
EXIT
无论如何,谢谢你的帮助。
@Martin Prikryl感谢您提供软件和解释。
问候!