批量文件删除多个文件夹中的多个文件,保留每个文件夹中的最后X个文

时间:2012-04-25 19:57:20

标签: batch-file

我写的脚本有问题:

@echo off 
e:
cd folder1
cd logs
cd App1

for /F "skip=20 delims=" %%F in ('dir /b/o-d/a-d log11101*.*') do del "%%F"

该脚本适用于1个文件夹。它保存了20个最新的日志文件,并删除了文件夹中以“log11101”开头的所有其余文件(因为我在这些文件夹中有其他日志文件我不想用这个脚本删除... 我想在多个文件夹中应用此脚本,但这些都在FOLDER1中,使用相同的“for / f”skip = 20 ...................... ............做del“%% F”。 由于父文件夹是FOLDER1 / LOGS:

,我应该做这样的事情
@echo off 
e:
cd folder1
cd logs
cd App1

for /F "skip=20 delims=" %%F in ('dir /b/o-d/a-d log11101*.*') do del "%%F"

cd ..
cd App2

for /F "skip=20 delims=" %%F in ('dir /b/o-d/a-d log11101*.*') do del "%%F"

但它不起作用!它适用于1个文件夹,但另一个,它删除除1个文件以外的所有文件,而不是保留20个文件并删除其余文件。

我是否可以通过脚本放置我想要定位的所有文件夹,这样的话只运行一次这个脚本? :

x:/folder1/logs/app1
x:/folder1/logs/app2
x:/folder1/logs/app4

for /f "skip=20...............

由于

1 个答案:

答案 0 :(得分:2)

我看不到你的第二个代码库如何只保留第二个文件夹中的1个文件 - 第二个文件夹应该与第一个文件夹的行为相同。你确定App2文件夹开头有多个log11101 *文件吗?

建议 - 在DEL命令之前插入ECHO并查看结果。输出看起来正确后,删除ECHO以使脚本正常运行。

在根目录中的文件夹列表上方便地执行删除操作只需很少的代码:

@echo off
for %%D in ("App1" "App2" "App4") do (
  cd /d "e:\folder1\logs\%%~D"
  for /f "skip=20 delims=" %%F in ('dir /b /o-d /a-d log11101*.*') do echo del "%%F"
)

如果要对根目录中的所有文件夹执行删除操作:

@echo off
for /d %%D in ("e:\folder1\logs\*") do (
  cd /d "%%D"
  for /f "skip=20 delims=" %%F in ('dir /b /o-d /a-d log11101*.*') do echo del "%%F"
)

我在DEL之前添加了ECHO,所以一旦一切看起来不错,请删除ECHO以使其正常运行。