616

我需要一种递归删除文件夹及其子文件夹的方法。

是否有为此预先构建的工具,还是我需要编写一个?

DEL /S不删除目录。

DELTREE已从 Windows 2000+ 中删除

4

24 回答 24

848

如果您使用的是经典命令提示符 (cmd.exe),则为 RMDIR 或 RD:

rd /s /q "path"

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

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

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

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

如果您使用的是 PowerShell,则可以使用Remove-Item(别名为deleraserdri和)并接受一个rm可以缩写为的参数rmdir-Recurse-r

rd -r "path"
于 2008-09-18T23:11:12.423 回答
151

行政:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

适用于任何东西,包括 sys 文件

编辑:我实际上找到了解决文件路径太长问题的最佳方法:

mkdir \empty
robocopy /mir \empty folder
于 2008-09-18T23:41:07.967 回答
128

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

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

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

于 2008-09-18T23:13:52.243 回答
23

转到路径并触发此命令。

rd /s /q "FOLDER_NAME"

/s :删除指定目录和所有子目录,包括任何文件。使用 /s 删除一棵树。

/q :以安静模式运行 rmdir。删除目录而不确认。

/?:在命令提示符处显示帮助。

于 2016-03-01T19:32:12.090 回答
20

您可以安装 cygwin,它具有rm以及ls等。

于 2008-09-18T23:14:45.127 回答
15

要删除目录(无论它是否存在),请使用以下命令:

if exist myfolder ( rmdir /s/q myfolder )
于 2016-06-01T19:59:06.383 回答
11

公认的答案很好,但假设您安装了 Node,您可以使用允许通配模式的节点库“rimraf”更精确地做到这一点。如果您经常使用它(我经常使用),只需全局安装即可。

yarn global add rimraf

然后,例如,我经常使用的模式:

rimraf .\**\node_modules

或者对于让您避开全局安装的单线器,但对于包动态下载需要稍长的时间:

npx rimraf .\**\node_modules
于 2019-03-01T15:27:33.947 回答
9
rm -r -fo <path>

是您可以在 Windows PowerShell 中获得的最接近的。它是的缩写

Remove-Item -Recurse -Force -Path <path>

(更多细节)

于 2020-09-04T17:20:22.550 回答
8

通过 Powershell

 Remove-Item -Recurse -Force "TestDirectory"

通过命令提示符

https://stackoverflow.com/a/35731786/439130

于 2018-12-19T21:08:03.567 回答
6

rmdir /S /Q %DIRNAME%

于 2008-09-18T23:12:44.697 回答
5

试试这个命令:

del /s foldername
于 2008-09-18T23:11:01.737 回答
4

rmdir /s 目录名

于 2008-09-18T23:10:48.303 回答
4

首先,让我们回顾一下是做什么的rm -rf

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

rm -rf在预期返回的地方通常使用三种场景0

  1. 指定的路径不存在。
  2. 指定的路径存在并且是一个目录。
  3. 指定的路径存在并且是一个文件。

我将忽略整个权限的事情,但无论如何,没有人使用权限或试图拒绝自己对 Windows 中的事物的写入权限(好吧,那是个玩笑……)。

首先设置ERRORLEVEL为0,然后仅在存在时删除路径,根据是否为目录使用不同的命令。如果路径不存在,则IF EXIST不会设置为 0,因此必须首先将 设置为 0,以便以模仿正常使用的方式正确检测成功。保护with是必要的,因为与 不同,如果目标不存在会抛出错误。ERRORLEVELERRORLEVELrm -rfRDIF EXISTRDrm -f

以下脚本片段假定 DELPATH 已预先引用。(当你做类似的事情时这是安全的SET DELPATH=%1。尝试ECHO %1输入 a.cmd并传递一个带有空格的参数,看看你自己会发生什么)。代码段完成后,您可以使用IF ERRORLEVEL 1.

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

关键是,当环境符合 POSIX 时,一切都会变得更简单。或者,如果您安装了一个最小的 MSYS 并使用它。

于 2015-04-21T17:40:10.517 回答
3

这是您需要做的...

使用以下行创建批处理文件

RMDIR /S %1

将批处理文件另存为Remove.bat并放入C:\windows

创建以下注册表项

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

使用以下值启动regedit并更新默认值HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default

"c:\windows\REMOVE.bat" "%1"

就是这样!现在您可以右键单击任何目录并使用 RMDIR 功能

于 2012-09-04T01:55:58.260 回答
2

您可以在 Windows 上安装GnuWin32并本机使用 *nix 命令。我先安装它,然后再在 Windows 的薄荷味新副本上安装其他任何东西。:)

于 2008-09-19T00:03:57.257 回答
2

使用 Powershell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

日志替换为要删除的目录名称。

get-childitem从当前路径 (.) 递归搜索名称为子目录。

remove-item删除结果。

于 2018-09-03T06:57:45.803 回答
2

使用风险自负。信息按“原样”提供。未经广泛测试。

右键单击 Windows 图标(通常是左下角)> 单击“Windows PowerShell(管理员)”> 使用此命令(请注意,如果您不小心,您可以轻松删除所有文件):

rd -r -include *.* -force somedir

somedir您要删除的非空目录在哪里。

请注意,对于外部连接的磁盘或有问题的磁盘,Windows 有时会表现得很奇怪 - 它在删除(或任何复制尝试)时不会出错,但不会按照指示删除(或不复制)目录。(我发现在这种情况下,至少对我而言,@n_y 在他的回答中给出的命令会产生类似“get-childitem:文件或目录已损坏且无法读取”之类的错误,因此在 PowerShell 中)

于 2019-06-12T23:16:17.130 回答
2

对于在 Windows 机器上安装npm包时遇到问题并且看到错误提示“rm -rf...找不到命令”的任何人,迟到但重要的答案。您可以使用bash cli在 Windows 上运行 rm 命令。

对于 npm 用户,npm config set script-shell "C:\Program Files\Git\bin\bash.exe"如果您尝试安装的 npm 包具有使用命令的安装后脚本rm -rf,则可以将 npm 的配置更改为这种方式,您将能够运行该rm命令而无需更改 npm 包中的任何内容或禁用安装后脚本配置。(例如,在他们的安装后脚本中styled-components使用命令)rm

如果您只想使用rm命令,您可以轻松地使用 bash 并传递参数。

所以是的,您可以在 Windows 上使用“rm”命令。

于 2020-04-05T18:17:16.877 回答
2

在 powershell 中rm -recurse -force工作得很好。

于 2021-07-09T10:48:13.013 回答
1

作为侧节点:

从具有所有子目录(递归)+强制删除的linux版本

$ rm -rf ./path

到 PowerShell

PS> rm -r -fo ./path

它具有接近相同的参数(只是分开)(需要 -fo,因为 -f 可以匹配不同的其他参数)

笔记:

Remove-Item ALIASE
    ri
    rm
    rmdir
    del
    erase
    rd
于 2021-07-13T21:13:51.970 回答
1

在 powershell 中, rm 是 的别名Remove-Item,所以删除一个文件,

rm -R -Fo the_file

相当于

Remove-Item -R -Fo the_file

如果您对 gnu util 感到满意rm,您可以在 windows 上rm通过choco包管理器使用 util。

使用以下命令在 powershell 中安装 gnu utils choco

choco install GnuWin

最后,

rm.exe -rf the_file
于 2021-10-01T13:04:52.617 回答
0

这对我有用:

只需尝试减少路径的长度。ie :: 将导致此类文件的所有文件夹重命名为尽可能小的名称。说出一个字母的名字。继续在文件夹层次结构中向上重命名。通过这个你有效地减少了路径长度。现在终于尝试立即删除文件。

于 2015-03-25T13:01:10.783 回答
0

Windows 注册表编辑器版本 5.00

[HKEY_CLASSES_ROOT\Folder\shell\rmdir\command]
@="cmd.exe /s /c rmdir "%V""

于 2021-07-22T07:42:46.883 回答
-3

如果您使用的是旧版本的 Windows,还有 deltree。

您可以从这里了解更多信息: SS64:DELTREE - 删除所有子文件夹和文件。

于 2008-09-18T23:14:50.743 回答