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

有没有为此预先构建的工具,或者我需要编写一个吗?

DEL /S 不删除目录。

DELTREE 已从 Windows 2000+ 中删除

有帮助吗?

解决方案

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

rd /s /q "path"

如果您使用的是 PowerShell,则可以使用 Remove-Item (别名为 del, erase, rd, ri, rmrmdir)并采取 -Recurse 可以简化为的参数 -r

rd -r "path"

其他提示

行政:

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

适用于任何内容,包括 sys 文件

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

mkdir \empty
robocopy /mir \empty folder

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

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

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

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

你可以安装cygwin,它有 rmls ETC。

转到该路径并触发此命令。

rd /s /q "FOLDER_NAME"

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

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

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

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

if exist myfolder ( rmdir /s/q myfolder )

rmdir /S /Q %DIRNAME%

rmdir /s 目录名

尝试这个命令:

del /s foldername

首先我们回顾一下什么 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 不设置 ERRORLEVEL 如果路径不存在则为 0,因此设置 ERRORLEVEL 首先必须为 0,才能以模仿正常的方式正确检测成功 rm -rf 用法。守护着 RDIF EXIST 是必要的,因为 RD, ,不像 rm -f, ,如果目标不存在,将抛出错误。

以下脚本片段假定 DELPATH 已加引号。(当你做类似的事情时这是安全的 SET DELPATH=%1. 。尝试放置 ECHO %1 在一个 .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 并使用它。

您可以安装 GnuWin32 并在 Windows 上本地使用 *nix 命令。我在 Windows 的薄荷味新副本上安装其他任何东西之前先安装这个。:)

这是你需要做的...

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

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 功能

使用Powershell 5.1

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

代替 日志 与您要删除的目录名称。

获取子项目 从当前路径 (.) 递归搜索具有该名称的子目录。

除去项目 删除结果。

接受的答案很好,但假设您安装了 Node,您可以使用允许通配模式的节点库“rimraf”更精确地完成此操作。如果您经常使用它(我经常使用),只需全局安装它即可。

yarn global add rimraf

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

rimraf .\**\node_modules

或者对于一个单行代码,可以让您避开全局安装,但动态下载软件包需要稍长的时间:

npx rimraf .\**\node_modules

这对我有用:

只需尝试减少路径的长度即可。IE ::将指向此类文件的所有文件夹重命名为尽可能小的名称。说出一个字母的名字。继续在文件夹层次结构中向上重命名。这样可以有效地减少路径长度。现在最后尝试立即删除该文件。

通过Powershell

 Remove-Item -Recurse -Force "TestDirectory"

通过命令提示符

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

使用风险由您自行承担。信息按“原样”提供。未经过广泛测试。

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

rd -r -include *.* -force somedir

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

请注意,对于外部连接的磁盘或有问题的磁盘,Windows 有时会表现得很奇怪 - 删除(或任何复制尝试)时不会出错,但目录不会按照指示删除(或未复制)。(我发现在这种情况下,至少对我来说,@n_y 在他的回答中给出的命令会产生类似 'get-childitem 的错误:该文件或目录已损坏和不可读。”结果是PowerShell)

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

我真的很喜欢这个查找命令的网站:SS64:Del - 删除文件

del /s /q 待删除目录

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top