84

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

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

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

4

10 回答 10

94

正如其他人所提到的,该rd命令具有/s递归删除子目录的开关。您可以将它与/q开关结合使用以强制删除子目录(及其内容)而不提示

rd /s /q c:\foobar

每个人都缺少的是,它rd不能完全替代谷歌搜索返回的deltree似乎(几乎)每一页,因为windows deltree您会相信。该deltree命令适用于目录和文件,使其成为一个方便的通用删除命令。即以下两项均有效:

deltree /y c:\foobar
deltree /y c:\baz.txt

但是rd(毫不奇怪)仅适用于目录。因此,只有这些命令中的第一个是有效的,而第二个给出错误并保持文件未被删除:

rd /s /q c:\foobar
rd /s /q c:\baz.txt

此外,该del命令仅适用于文件,而不适用于目录,因此只有第二个命令有效,而第一个给出错误:

del /f /q c:\foobar
del /f /q c:\baz.txt

没有内置的方法来删除文件和目录,就像使用deltree. 单独使用rdanddel充其量是不方便的,因为它需要区分文件系统对象(文件/文件夹名称)是文件还是目录,这并不总是可行或实用的。

您可以从以前的操作系统复制该deltree命令,但它仅适用于 32 位版本的 Windows,因为它是 16 位 DOS 命令(即使在 Windows 9x 中)。

另一种选择是创建一个同时调用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

这同时调用rdand del,传入参数并将输出重定向到nul以避免其中一个总是会发出的错误。

您可能希望自定义行为以适应或简化参数或允许错误消息,但即便如此,它也不理想,也不能直接替代deltree.

另一种方法是获取第三方工具,尽管找到一个是搜索查询制作的真正练习。

于 2013-01-15T19:57:45.067 回答
44

它被替换为命令:RMDIR 或 RD

使用 /S 删除所有子目录

用 /Q 安静地使用它

例子:

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

文档:

于 2008-12-03T22:07:48.280 回答
10

怀着怀旧之情,我编写了自己的 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 *
于 2015-03-28T00:04:33.077 回答
6
rmdir /s /q directory
于 2008-12-03T22:02:44.720 回答
5

如今,您可以使用 Powershell 执行相同的任务:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
于 2017-02-16T14:26:48.430 回答
4
$帮助研发
移除(删除)一个目录。

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

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

    /Q 安静模式,不询问是否可以用 /S 删除目录树
于 2008-12-03T22:08:07.920 回答
2

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

通过键入此“RD /?” 在没有双引号的 cmd 中,您将得到您想要的。

于 2013-01-10T17:04:39.660 回答
1

递归删除目录及其所有内容

rd /s MY_DOOMED_DIR
于 2016-06-09T21:42:33.750 回答
0

用这个:

cd (your directory here)
del *.* /f /s /q
于 2018-08-17T02:35:26.123 回答
0

删除所有文件和子目录

cd /d Directory && rd /s /q .\
于 2018-10-01T08:18:48.403 回答