使用模式匹配删除当前目录中的所有文件夹

时间:2012-06-18 09:23:38

标签: windows batch-file

我需要删除当前目录中以“foo”开头,后跟日期
的所有文件夹 例如我们有

  1. foo20120620
  2. foo20120513
  3. fooblabla
  4. 我可以成功删除一个与当前日期相匹配的文件夹  示例

    set FOO_FOLDER=%CD%\foo%datetimef%      
    
    echo Y | rd /s/q %FOO_FOLDER%     
    

    但是我无法删除所有以foo开头的文件夹。

    我已尝试过类似

    的内容
    set OLD_PATTERN="%CD%\foo"     
    del %OLD_PATTERN%*
    

    我已经用Google搜索并试图关注本论坛中已经提出的一些问题,但这些问题对我没什么帮助。

    任何建议对我都有很大的帮助 必须在Windows端批处理脚本。

3 个答案:

答案 0 :(得分:11)

您可以使用FOR /D命令。

for /d %%p in (foo*) do rd /s /q "%%p"

答案 1 :(得分:1)

神奇的for command in dos batch ....

从命令行

for /f "tokens=*" %f in ('dir .\foo* /ad/b') do rd "%f" /s/q 

来自批处理文件

for /f "tokens=*" %%f in ('dir .\foo* /ad/b') do rd "%%f" /s/q 

/ f在括号中的''中运行命令,并对其进行标记。通过说tokens = *所有文件/目录名称进入一个变量%f

这是一个例子

C:\temp>md foo3

C:\temp>md foo2

C:\temp>md foo1

C:\temp>dir
 Volume in drive C is TEST
 Volume Serial Number is F47F-AAE1

 Directory of C:\temp

18/06/2012  09:42 p.m.    <DIR>          .
18/06/2012  09:42 p.m.    <DIR>          ..
18/06/2012  09:42 p.m.    <DIR>          foo1
18/06/2012  09:42 p.m.    <DIR>          foo2
18/06/2012  09:42 p.m.    <DIR>          foo3
               0 File(s)              0 bytes
               5 Dir(s)  131,009,933,312 bytes free

C:\temp>for /f "tokens=*" %f in ('dir .\foo* /ad/b') do rd "%f" /s/q

C:\temp>rd "foo1" /s/q

C:\temp>rd "foo2" /s/q

C:\temp>rd "foo3" /s/q

C:\temp>dir /ad
 Volume in drive C is TEST
 Volume Serial Number is F47F-AAE1

 Directory of C:\temp

18/06/2012  09:42 p.m.    <DIR>          .
18/06/2012  09:42 p.m.    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  131,009,933,312 bytes free

C:\temp>

答案 2 :(得分:0)

我知道这是旧的,但我认为值得一提的是FOR命令创建的参数变量用字母而不是数字标识(例如%% G),因此,为了避免参数之间的混淆和路径名格式字母,避免使用字母(a,d,f,n,p,s,t,x,z)作为FOR参数或只选择一个UPPER大小写的FOR参数字母。

格式字母区分大小写,因此使用大写字母也是避免冲突的好方法,例如。 %% A而不是%% a。

Reference