在早期版本的MS-DOS中 - 我想说版本7,但我可能错了 - 有一个deltree
命令,它以递归方式删除给定路径中的所有子目录和文件。
deltree
不再存在,但del
似乎没有继承删除树的功能。 del /s
删除文件,但不删除文件夹。
如何轻松(即在一个命令中)从批处理文件中删除树?
答案 0 :(得分:81)
正如其他人所提到的,rd
命令具有/s
切换以递归删除子目录。您可以将它与/q
开关结合使用,强制删除子目录(及其内容),而不会提示如此
rd /s /q c:\foobar
每个人都缺少的是rd
不是deltree
的确切替代品,因为貌似(almost)Google搜索返回的每个页面{{1}你能相信吗? 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
和rd
最多是不方便的,因为它需要区分文件系统对象(文件 - /文件夹名称)是不是总是可行或实际的文件或目录。
您可以从以前的操作系统中复制del
命令,但它只能在32位版本的Windows上运行,因为它是16位DOS命令(即使在Windows 9x中)。
另一种选择是创建一个同时调用deltree
和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
。
另一种方法是获得第三方工具,但在搜索查询制作中找到一个是真正的练习。
答案 1 :(得分:41)
它被替换为命令:RMDIR或RD
使用/ S
删除所有子目录使用/ Q
安静地使用它示例:
RMDIR /S /Q Folder2Delete
RD /S /Q Folder2Delete
文档:
答案 2 :(得分:6)
感觉怀旧,我写了自己的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 *
答案 3 :(得分:5)
rmdir /s /q directory
答案 4 :(得分:4)
$ help rd Removes (deletes) a directory. RMDIR [/S] [/Q] [drive:]path RD [/S] [/Q] [drive:]path /S Removes all directories and files in the specified directory in addition to the directory itself. Used to remove a directory tree. /Q Quiet mode, do not ask if ok to remove a directory tree with /S
答案 5 :(得分:4)
如今,您可以使用Powershell执行相同的任务:
powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
答案 6 :(得分:2)
实际上,现代Windows操作系统中的RMDIR和RD命令在单个命令中将命令RD和Deltree of Win 98合并。这是一个内部命令,这就是为什么你找不到任何RD.exe和RMDIR.exe。
输入“RD /?”在没有双qoutes的cmd中,你会得到你想要的。
答案 7 :(得分:0)
以递归方式删除目录及其所有内容
rd /s MY_DOOMED_DIR
答案 8 :(得分:0)
使用此:
cd (your directory here)
del *.* /f /s /q
答案 9 :(得分:-1)
删除所有文件和子目录
cd /d Directory && rd /s /q .\