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

是否有一个预先构建的工具,或者我需要编写一个?

DEL /S不删除目录。

DELTREE已从Windows 2000+中删除


当前回答

以下是你需要做的事情……

用下面的代码行创建一个批处理文件

Rmdir / s %1

将批处理文件保存为Remove.bat,并将其放在C:\windows中

创建以下注册表项

HKEY_CLASSES_ROOT\目录\shell\删除目录

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

“c: \ windows \ REMOVE.bat”“% 1”

这就是它!现在您可以右键单击任何目录并使用RMDIR函数

其他回答

rmdir /S /Q %DIRNAME%

首先,让我们回顾一下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:

指定的路径不存在。 指定的路径已存在,且为目录。 指定路径已存在,且为文件。

我将忽略整个权限的事情,但没有人使用权限或试图拒绝自己对Windows中的东西进行写访问(好吧,这意味着一个笑话…)

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

下面的脚本片段假设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并使用它。

使用Powershell 5.1

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

替换为需要删除的目录名。

Get-childitem从当前路径(.)中递归地搜索具有该名称的子目录。

Remove-item删除结果。

进入该路径并触发该命令。

rd /s /q "FOLDER_NAME"

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

/q:以quiet模式运行rmdir。删除目录时不需要确认。

/ ?:在命令提示符下显示帮助信息。

Rmdir /s dirname