FTP获取和删除多个文件

FTP获取和删除多个文件,ftp,Ftp,我必须通过FTP获取和删除多个文件,因此我编写了以下脚本: 打开ftp.myftpserver.org 用户 通过 cd文件夹 lcd E:\localdir mget* mdel* 再见 这可以工作,但不安全,因为文件夹是从其他来源馈送的,而mdel*步骤可能会同时删除上载的文件 我想一个解决方案可能是将文件远程移动到另一个文件夹,在流程开始时创建一个文件列表,但我不知道如何创建它 有可能吗?不知道是否可以通过ftp客户端的脚本来实现这一点 最好将其作为程序或scipt使用您选择的语言与FTP

我必须通过FTP获取和删除多个文件,因此我编写了以下脚本:

打开ftp.myftpserver.org
用户
通过
cd文件夹
lcd E:\localdir
mget*
mdel*
再见

这可以工作,但不安全,因为
文件夹
是从其他来源馈送的,而
mdel*
步骤可能会同时删除上载的文件

我想一个解决方案可能是将文件远程移动到另一个文件夹,在流程开始时创建一个文件列表,但我不知道如何创建它


有可能吗?

不知道是否可以通过ftp客户端的脚本来实现这一点

最好将其作为程序或scipt使用您选择的语言与FTP库结合使用,这样您就可以更好地控制FTP操作。e、 g.perl与Net::ftp、java等

然后,您可以实现如下算法:

remote cd to required folder
localcd to required folder 
list current files in remote folder
for each file in list that matchs required pattern
   get file
   if get ok then 
      delete file
   else
      log error,exit or whatever error handling you want
   endif
endfor

还需要确保您没有尝试获取正在写入的文件,这取决于o/s,这可能通过文件锁定为您处理,但您需要确保文件在两个阶段的过程中写入远程目录。首先也是一个临时目录或文件名,它与您正在检查的文件模式不匹配,然后重命名或移动到您将检测到的正确位置和名称。

好的,然后我认为您可以使用两个单独的ftp调用和脚本来实现我描述为批处理脚本的算法。第一个用于列出要从远程目录传输的文件,第二个用于从列表中获取并删除单个文件

文件获取脚本必须在每次循环迭代中动态创建,以获取下一个文件

cd to working dir
Run FTP with script to: 
     cd to remote folder
     list files matching required pattern and store in local file
       (e.g: ls files_*.txt filelist.txt)

for each file in file list created above (e.g. use 'for /f ...' command to loop through filelist.txt)
   create temp ftp script to:
       cd to remote dir
       lcd to local dir
       get file
       del file
   run FTP with temp script
endfor
这个网站有一个做类似的例子(请注意,上面显示的脚本不起作用,评论给出了所需更正的细节)


FTR我遵循了这个很好的提示,成功地做了一些有用的东西,也许不优雅,但有用:

获取文件列表的第一步:

E: cd E:\localdir ftp -i -s:E:\localdir\getfilelist.bat E:\localdir\movefiles.bat getfilelist.bat

open ftp.myserver.it myuser pass1234 cd ftpfolder prompt n lcd E:\localdir ls *.??? filelist.txt bye 打开ftp.myserver.it 我的用户 密码1234 光碟光碟 提示n lcd E:\localdir 是吗。???filelist.txt 再见 下载和删除上述文件的第二步

movefiles.bat

@echo off setlocal enableextensions setlocal enabledelayedexpansion echo open ftp.myserver.it>>myscript echo user myuser pass1234>>myscript echo cd ftpfolder>>myscript echo prompt n>>myscript echo ascii>>myscript echo lcd E:\downloaddir>>myscript for /F "usebackq tokens=1,2* delims=," %%G IN ("E:\localdir\filelist.txt") DO ECHO rename %%G %%G_TMP>>myscript echo mget *_TMP>>myscript echo mdelete *_TMP>>myscript echo bye>>myscript ftp -n -s:myscript del filelist.txt del myscript e: cd E:\downloaddir ren *.???_TMP *.??? @回音 setLocalEnableExtensions 延迟扩展 echo打开ftp.myserver.it>>myscript 回显用户myuser pass1234>>myscript echo cd ftpfolder>>myscript echo提示符n>>myscript echo ascii>>myscript echo lcd E:\downloaddir>>myscript 对于/F“usebackq tokens=1,2*delims=,”%%G在(“E:\localdir\filelist.txt”)中,请执行ECHO重命名%%G%%G\u TMP>>myscript echo mget*\u TMP>>myscript echo mdelete*\u TMP>>myscript 回声再见>>myscript ftp-n-s:myscript del filelist.txt del myscript e: cd E:\downloaddir ren*?\u TMP*。??? 调用上述步骤的bat文件:

E: cd E:\localdir ftp -i -s:E:\localdir\getfilelist.bat E:\localdir\movefiles.bat E: cd E:\localdir ftp-i-s:E:\localdir\getfilelist.bat E:\localdir\movefiles.bat
希望能有帮助

我也有类似的问题。看起来这里有很多人在挣扎;-)

我必须下载多个文件,并在远程服务器上成功下载后将其删除,以避免重复处理。执行
mget
时,远程系统添加更多文件的可能性很小。因此,
mdelete
可能会删除未转换的文件

我的方法是不使用FTP命令以外的任何东西。我们开始:

cd <dir on remote server>
mkdir Transfer
mv *.* Transfer
mget Transfer\*.*
del Transfer\*.*
rmdir Transfer
cd
mkdir传输
mv**传输
mget传输\**
del Transfer\**
rmdir传输
我一眼就将所有文件移动到远程服务器上的一个额外目录中。应该非常快,因为这在本地发生。一旦文件被转移到传输目录,我就执行真正的
mget
下载。这可能需要更长的时间,同时可以在远程服务器主目录上安全地上载更多文件


下载完成后,我将删除传输目录中的所有文件并删除目录本身。

谢谢,但我无法运行程序,我最多只能使用dos命令行。智能但不是100%安全