如何使用批处理删除FTP文件夹的所有文件

How to delete all files of a FTP folder using batch

我从几个帖子中搜索了这个问题的解决方案,但没有找到。我想构建一个批处理文件,该文件转到 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

对于这个解决方案,我注意到如果我使用命令 "delete" 并指定文件,它就可以工作。像这样: echo 删除 312312312.csv >> ftpcmd.dat

但出于某种原因,使用 mdel(如示例)它不会。

你知道更好的方法吗?

谢谢

mdel命令需要列出远程目录中的文件。问题是 Windows 内置 ftp.exe 仅支持 FTP 活动模式。在这种模式下,服务器需要打开到您机器的传入连接,以传输列表,默认情况下被 Windows 防火墙或您与服务器之间的任何其他 firewall/proxy/NAT 阻止的内容。这使得 ftp.exe 如今最没用。

有关详细信息,请参阅我关于 network configuration for FTP active mode 的文章。


使用任何其他第 3 方 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, by replacing the ftp:// with the ftpes://

另请参阅 converting Windows FTP script to WinSCP script 指南。

(我是WinSCP的作者)

我找到了解决此问题的方法: 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 感谢软件和解释。

此致!