FTP:获取和删除特定数量的文件

Posted

技术标签:

【中文标题】FTP:获取和删除特定数量的文件【英文标题】:FTP: get and delete a specific number of files 【发布时间】:2016-06-08 12:13:21 【问题描述】:

我正在尝试创建批处理文件的组合,并使用 ftp 命令从 FTP 目录中获取和删除特定数量的文件。 现在我被卡住了,我得到了所有文件,但是当目录中有超过 250 个文件时,批处理停止并且无法继续。

这是我的实际情况,我有这3个文件:

FILE 01_FTP_GetFileList.bat

cd C:\文件夹

ftp -s:02_FTP_GetFileList.txt

C:\folder\03_FTP_MoveFiles.bat

文件 02_FTP_GetFileList.txt

打开 xxx.xxx.xxx.xxx

用户

密码

散列

提示关闭

cd 文件夹

液晶文件夹

ls *.gz filelist.txt

再见

文件 03_FTP_MoveFiles.bat

@echo 关闭

设置本地启用扩展

setlocal enabledelayedexpansion

回显打开 xxx.xxx.xxx.xxx>>我的脚本

echo 用户用户密码>>myscript

回显提示 n>>myscript

echo ascii>>myscript

echo cd 文件夹>>myscript

echo lcd C:\folder>>myscript

for /F "usebackq tokens=1,2* delims=," %%G IN ("C:\folder\filelist.txt") DO echo mget %%G>>myscript

for /F "usebackq tokens=1,2* delims=," %%G IN ("C:\folder\filelist.txt") DO echo mdelete %%G>>myscript

回声再见>>我的脚本

ftp -n -s:myscript

删除文件列表.txt

删除我的脚本

要恢复,第一个文件会调用第二个和第三个文件,正如您在代码中看到的那样,我在列出该目录中的文件后获取并删除特定目录中的所有 *.gz 文件(这是为了避免删除复制后添加的文件)。

现在我想只复制列表的第一个文件,或者...只列出文件夹中的 100 个文件,在我看来是一样的。

提前致谢!!

【问题讨论】:

你可以在循环中加入一个计数器并在 100 之后停止?见SET /A 是的,我可以,我必须把它放在第三个文件中?这样, filelist.txt 将拥有整个列表,但只会复制前 100 个。对吗? 您可能想使用ftp -i 关闭交互式提示。 【参考方案1】:

我在帖子中没有看到任何计数器变量。下面的代码使用 FILE_COUNT 作为计数器。它由SET /A FILE_COUNTER+=1 语句递增。 FILE_COUNT 被测试为小于 100。请参阅SET /?

SETLOCAL ENABLEDELAYEDEXPANSION

SET MAX_FILES=100
SET /S FILE_COUNT=0

FOR /F "usebackq tokens=1,2 delims=," %%a IN (`TYPE "C:\folder\filelist.txt"`) DO (
    IF !FILE_COUNT! LSS %MAX_FILES% (
        echo mget %%a>>myscript
        echo mdelete %%a>>myscript
    )

    SET /A FILE_COUNT+=1
)

【讨论】:

谢谢 Liturgist 我刚刚更改了一个东西,因为您写道:echo mget %%G 我用 echo mget %%a 代替它。现在它工作正常。传输速度真的很慢。但有效。如果您对加快传输有任何建议,请告诉我 =) 干杯 @MarcaSolkanar - 我很抱歉。我已经更正了这一点以及代码中的一些其他细节。我很高兴它有所帮助,即使它不够完美。

以上是关于FTP:获取和删除特定数量的文件的主要内容,如果未能解决你的问题,请参考以下文章

从 eventStore 获取特定数量的事件

如何通过特定日期的唯一客户和重复客户获取每天的客户数量?

获取 Mongodb 中特定页面的关注者数量

列出具有特定扩展名的目录和文件数量,构建特定菜单

从数据库而不是会话中获取特定产品的数量 - 购物车(PHP 和 MySQL)

Steam API 获取特定游戏的历史玩家数量