deltree发生了什么,它的替代品是什么?


80

在MS-DOS的早期版本中-我想说的是版本7,但我可能错了-有一个deltree命令,该命令从给定路径递归删除所有子目录和文件。

deltree不再存在,但del似乎没有继承删除树的功能。del /s删除文件,但不删除文件夹。

您如何轻松地(即在一个命令中)从批处理文件中删除树?


2
deltree是在5.0版中引入的(我仍然记得能够使用它的喜悦)-老兄,我觉得老了。
Mark D

Answers:


90

就像其他人提到的那样,该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。单独使用rddel最多是不方便的,因为它需要区分文件系统对象(文件名/文件夹名)是文件还是目录,而这并非总是可行或不实际的。

您可以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

这会同时调用rddel,传入参数并重定向输出,nul以避免其中一个将始终发出的错误。

您可能想要自定义行为以适应或简化参数或允许出现错误消息,但是即使如此,它也不是理想的选择,也不是的直接替代deltree

另一种选择是获取第三方工具,尽管找到一个第三方工具是搜索查询技巧中的一项实际工作。


2
@TobyAllen,“ rm”?你是说rd吗?如果是这样,那么您需要重新阅读帮助文本。它说除目录本身外,还删除指定目录中的所有目录和文件。用于删除目录树。就像我说的,它不会删除文件。如果按以下方式使用它:rd /s foobar.txt,它将在确定时提示您,并且如果您说“是”(或使用/q开关),则会出现错误The directory name is invalid.
Synetech 2013年

实际上,您可以使用删除目录(包括其子目录)下的所有内容RMDIR /S,因此无法一口气删除文件和文件夹实际上是不正确的。
vapcguy

@vapcguy,rd /s仅适用于目录,不适用于其中的文件。为了删除其中的文件,您必须rd在目录本身上使用。例如,您不能说rd c:\target\foobar.txt,您必须使用rd /s c:\target,但是您可能不想删除目录本身,而只希望删除其内容。deltree可以这样做,但rd /s不能rd /s删除目录本身。
Synetech

请注意,我说RMDIR /S-不rd /s。但是即使使用rd,即使目录消失了,也如何删除文件呢?即使不是,文件也被有效地孤立了,应该由系统进行垃圾回收。即使那没有发生,但如果您重新创建目录,也肯定会这样做-您不会再神奇地得到文件列表。指针实际上已删除。那么,您是说您永远都不会收回该空间,因为如果您使用过,您再也无法删除这些文件了rd /s?不知道我会相信-这将是一个可怕的错误。重点是删除文件和目录。
vapcguy

如果你在一个名为“测试”你的“文档”文件夹中创建一个目录,创建一个测试文本文档出现在Windows中,然后关闭浏览器窗口,进入命令行,cd Documentsrd /s test,目录和文本文件将被删除。rmdir /s test也可以。您永远不要尝试使用rd /s C:\Users\me\Documents\test\test.txt-那绝对是愚蠢的。但是您可以并且应该在目录上使用命令,而不必在文件名上使用。但是通过删除目录,您可以删除文件。
vapcguy

43

替换为以下命令:RMDIR或RD

使用/ S删除所有子目录

与/ Q安静地使用

例:

RMDIR /S /Q Folder2Delete
RD /S /Q Folder2Delete

说明文件:


3
“ RMDIR / S / Q。\”有效擦除当前目录及其下的所有内容。是的,它抱怨无法删除当前目录,这很有用。只需确保在运行时您在正确的目录中即可!:)
Mmm

9

怀旧,我编写了自己的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 *


5

如今,您可以使用Powershell来完成相同的任务:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"

不幸的是,PowerShell肿且运行缓慢。:-\当公司试图强迫用户“升级”到最新的垃圾邮件时,我讨厌它。😒
Synetech

4
$帮助rd
删除(删除)目录。

RMDIR [/ S] [/ Q] [drive:]路径
RD [/ S] [/ Q] [驱动器:]路径

    / S删除指定目录中的所有目录和文件
            除了目录本身。用于删除目录
            树。

    / Q安静模式,不要问是否可以使用/ S删除目录树

2

实际上,现代Windows操作系统中的RMDIR和RD命令将Win 98的RD和Deltree命令合并在一个命令中。这是一个内部命令,因此您找不到任何RD.exe和RMDIR.exe。

通过键入此“ RD /?” 在没有双qoutes的cmd中,您将完全得到想要的东西。




0

删除所有文件和子目录

cd /d Directory && rd /s /q .\

您的答案似乎与其他答案重复(有些答案已有10年历史了)。我看不到更多或更好的解释或任何其他优势
jeb

1
@jeb,实际上不是。两者略有不同,并且略有不同是至关重要的,并使其优越。👍😉
Synetech
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.