1

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

  1. foo20120620
  2. foo20120513
  3. 胡闹

我可以成功删除一个与当前日期
示例匹配的文件夹

set FOO_FOLDER=%CD%\foo%datetimef%      

echo Y | rd /s/q %FOO_FOLDER%     

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

我已经尝试过类似的东西

set OLD_PATTERN="%CD%\foo"     
del %OLD_PATTERN%*

我已经用谷歌搜索并尝试关注这个论坛中已经提出的一些问题,但这些对我没有多大帮助。

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

4

3 回答 3

12

你可以使用FOR /D命令。

for /d %%p in (foo*) do rd /s /q "%%p"
于 2012-06-18T09:28:52.120 回答
1

dos批处理中的神奇for命令....

从命令行

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>
于 2012-06-18T09:27:34.477 回答
0

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

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

参考

于 2017-08-27T17:37:46.710 回答