FTP:获取并删除特定数量的文件
FTP: get and delete a specific number of files
我正在尝试创建批处理文件的组合,使用 ftp 命令从 FTP 目录中获取和删除特定数量的文件。
现在我卡住了,我得到了所有文件,但经常,当目录中的文件超过 250 个时,批处理停止并且无法继续。
这是我的实际情况,我有这3个文件:
文件01_FTP_GetFileList.bat
cd C:\folder
ftp -s:02_FTP_GetFileList.txt
C:\folder_FTP_MoveFiles.bat
文件 02_FTP_GetFileList.txt
open xxx.xxx.xxx.xxx
user
password
hash
prompt off
cd folder
lcd folder
ls *.gz filelist.txt
bye
文件03_FTP_MoveFiles.bat
@echo off
setlocal enableextensions
setlocal enabledelayedexpansion
echo open xxx.xxx.xxx.xxx>>myscript
echo user user password>>myscript
echo prompt n>>myscript
echo ascii>>myscript
echo cd folder>>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
echo bye>>myscript
ftp -n -s:myscript
del filelist.txt
del myscript
要恢复,第一个文件调用第二个和第三个文件,正如您在代码中看到的,我在列出该目录中的文件后获取并删除了特定目录中的所有 *.gz 文件(这避免删除复制后添加的文件)。
现在我想只复制列表的第一个文件或...只列出文件夹中的 100 个文件,在我看来是一样的。
提前致谢!!
我在 post 中没有看到任何计数器变量。下面的代码使用 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
)
我正在尝试创建批处理文件的组合,使用 ftp 命令从 FTP 目录中获取和删除特定数量的文件。 现在我卡住了,我得到了所有文件,但经常,当目录中的文件超过 250 个时,批处理停止并且无法继续。
这是我的实际情况,我有这3个文件:
文件01_FTP_GetFileList.bat
cd C:\folder
ftp -s:02_FTP_GetFileList.txt
C:\folder_FTP_MoveFiles.bat
文件 02_FTP_GetFileList.txt
open xxx.xxx.xxx.xxx
user
password
hash
prompt off
cd folder
lcd folder
ls *.gz filelist.txt
bye
文件03_FTP_MoveFiles.bat
@echo off
setlocal enableextensions
setlocal enabledelayedexpansion
echo open xxx.xxx.xxx.xxx>>myscript
echo user user password>>myscript
echo prompt n>>myscript
echo ascii>>myscript
echo cd folder>>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
echo bye>>myscript
ftp -n -s:myscript
del filelist.txt
del myscript
要恢复,第一个文件调用第二个和第三个文件,正如您在代码中看到的,我在列出该目录中的文件后获取并删除了特定目录中的所有 *.gz 文件(这避免删除复制后添加的文件)。
现在我想只复制列表的第一个文件或...只列出文件夹中的 100 个文件,在我看来是一样的。
提前致谢!!
我在 post 中没有看到任何计数器变量。下面的代码使用 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
)