2012-04-25 105 views
0

在多个文件我有我写的剧本有问题:批处理文件删除多个文件夹中保存最近的X文件的每个文件夹

@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 ......................... .........做德尔“%% F” 我因子评分做这样的事情,因为父文件夹的是FOLDER1 /日志:

@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............... 

感谢

回答

2

我怎么没看到你的第二个代码库只保留1个文件中的第二个文件夹 - 第二个文件夹应该相同的行为,以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使其功能。

相关问题