在命令提示符下删除具有共同前缀的几个目录

在命令提示符下删除具有共同前缀的几个目录

我想删除同一目录下的多个子目录。这些目录的名称的前三个字符都是“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 并执行它。

相关内容