在MS-DOS的早期版本中-我想说的是版本7,但我可能错了-有一个deltree
命令,该命令从给定路径递归删除所有子目录和文件。
deltree
不再存在,但del
似乎没有继承删除树的功能。del /s
删除文件,但不删除文件夹。
您如何轻松地(即在一个命令中)从批处理文件中删除树?
Answers:
就像其他人提到的那样,该rd
命令具有/s
切换以递归方式删除子目录的开关。您可以将其与/q
开关结合使用,以强制删除子目录(及其内容),而无需进行提示
rd /s /q c:\foobar
什么大家缺少的是,rd
是不是一个确切的更换deltree
为看似(几乎由谷歌搜索返回)每一页windows deltree
会让你相信。该deltree
命令适用于目录和文件,使其成为一个方便且通用的删除命令。下列两项均有效:
deltree /y c:\foobar
deltree /y c:\baz.txt
但是rd
(并不奇怪)仅适用于directory。因此,只有以下命令中的第一个有效,而第二个命令给出并出错,并且文件未删除:
rd /s /q c:\foobar
rd /s /q c:\baz.txt
此外,该del
命令仅适用于文件,不适用于目录,因此只有第二条命令有效,而第一条命令却显示错误:
del /f /q c:\foobar
del /f /q c:\baz.txt
没有内置方法可以删除文件和目录deltree
。单独使用rd
和del
最多是不方便的,因为它需要区分文件系统对象(文件名/文件夹名)是文件还是目录,而这并非总是可行或不实际的。
您可以deltree
从以前的操作系统复制命令,但是由于它是16位DOS命令(即使在Windows 9x中也是如此),因此仅在32位版本的Windows上可以使用。
另一种选择是创建一个同时调用del
和的批处理文件rd
。像这样的东西:
::deltree.bat
@echo off
rd %* 2> nul
del %* 2> nul
您可以这样称呼它:
deltree.bat /s /q /f c:\foobar
deltree.bat /s /q /f c:\baz.txt
这会同时调用rd
和del
,传入参数并重定向输出,nul
以避免其中一个将始终发出的错误。
您可能想要自定义行为以适应或简化参数或允许出现错误消息,但是即使如此,它也不是理想的选择,也不是的直接替代deltree
。
另一种选择是获取第三方工具,尽管找到一个第三方工具是搜索查询技巧中的一项实际工作。
rd /s foobar.txt
,它将在确定时提示您,并且如果您说“是”(或使用/q
开关),则会出现错误The directory name is invalid.
RMDIR /S
,因此无法一口气删除文件和文件夹实际上是不正确的。
rd /s
仅适用于目录,不适用于其中的文件。为了删除其中的文件,您必须rd
在目录本身上使用。例如,您不能说rd c:\target\foobar.txt
,您必须使用rd /s c:\target
,但是您可能不想删除目录本身,而只希望删除其内容。deltree
可以这样做,但rd /s
不能rd /s
删除目录本身。
RMDIR /S
-不rd /s
。但是即使使用rd
,即使目录消失了,也如何删除文件呢?即使不是,文件也被有效地孤立了,应该由系统进行垃圾回收。即使那没有发生,但如果您重新创建目录,也肯定会这样做-您不会再神奇地得到文件列表。指针实际上已删除。那么,您是说您永远都不会收回该空间,因为如果您使用过,您再也无法删除这些文件了rd /s
?不知道我会相信-这将是一个可怕的错误。重点是删除文件和目录。
cd Documents
,rd /s test
,目录和文本文件将被删除。rmdir /s test
也可以。您永远不要尝试使用rd /s C:\Users\me\Documents\test\test.txt
-那绝对是愚蠢的。但是您可以并且应该在目录上使用命令,而不必在文件名上使用。但是通过删除目录,您可以删除文件。
替换为以下命令:RMDIR或RD
使用/ S删除所有子目录
与/ Q安静地使用
例:
RMDIR /S /Q Folder2Delete
RD /S /Q Folder2Delete
说明文件:
怀旧,我编写了自己的deltree.exe。它适用于目录和文件,并使用SHFileOperation()来提高速度。
https://github.com/ai7/toolbox/tree/master/deltree
deltree v1.01 [Mar 27 2015, 16:31:02] (gcc 4.9.1)
Usage: deltree [options] <path> ...
Options:
-y yes, suppresses prompting for confirmation
-s silent, do not display any progress dialog
-n do nothing, simulate the operation
-f force, no prompting/silent (for rm compatibility)
-r ignored (for rm compatibility)
Delete directories and all the subdirectories and files in it.
它需要通配符,您可以像unix rm一样使用它:
deltree -rf *