我想删除同一目录下的多个子目录。这些目录的名称的前三个字符都是“tmp”。这不起作用:
C:\Documents and Settings\rajesh\Local Settings\Temp> rmdir tmp*
答案1
该rmdir
命令不接受通配符。您可以使用一个小循环for
来实现相同的目的。这将rmdir
多次运行该命令 - 对与给定模式匹配的每个文件/文件夹运行一次:
for /D %f in (tmp*) do rmdir "%f"
- 请注意,如果文件夹不为空,并且您希望它递归到其中,则需要
/S
在末尾添加。 - 如果您想阻止确认检查,
/Q
也请添加。 - 如果要阻止它打印出每一行的命令,请
@
在命令前添加。 - %f 周围的引号将允许删除带有空格的文件夹。
例如,有了这些选项,您将拥有:
for /D %f in (tmp*) do @rmdir "%f" /Q /S
要查看完整用法,请输入rmdir /?
。
答案2
一个好的、安全的通用方法是创建一个包含要删除的目录的文件,dir /ad > blah
然后检查文件是否包含您想要的内容,然后创建一个回显文件每一行的 for 命令。 for /f %a in (blah) do @echo %a
然后根据您想要的命令对其进行修改,例如,此行将 rmdir 放在文件每一行的开头for /f %a in (blah) do @echo rmdir %a
或结尾,将 /q /s 添加到已经存在的 rmdir %a,即使用 @echo rmdir %a /q /s。然后,一旦确定要运行的命令,删除 echo 部分,以便for /f %a in (blah) do @rmdir %a /q /s
另一种方法也是使用该起始方法制作列出要删除的子目录的文件。因此可以修改文件的每一行以读取删除该子目录的命令。然后在文件上使用 sed 将子目录 x 替换为 rmdir x /q /s。
因此,如果您有名为 blah 的文件, sed "s/.*/rmdir \0 \/q\/s/" blah >f
type f
请查看它是否包含所有命令。删除每个子目录。如果您对它感到满意并想要执行它,则可以将 f 重命名为 f.bat 并执行它。