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

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

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或RD如果你使用经典的命令提示符(cmd.exe):

rd /s /q "path"

RMDIR [/S] [/Q] [drive:]路径 RD [/S] [/Q] [drive:]路径 /S除目录本身外,删除指定目录下的所有目录和文件。删除目录树。 /Q安静模式,不询问是否ok删除目录树与/S

如果你正在使用PowerShell,你可以使用Remove-Item(别名为del, erase, rd, ri, rm和rmdir),并带一个-Recurse参数,可以缩短为-r

rd -r "path"

你可以安装cygwin,它有rm和ls等。

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

rm -R -Fo the_file

等于

Remove-Item -R -Fo the_file

如果你对gnu rm util感到舒服,你可以在windows上通过choco包管理器来运行rm util。

在powershell中使用choco安装gnu utils:

choco install GnuWin

最后,

rm.exe -rf the_file

管理:

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

适用于包括sys文件在内的任何文件

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

mkdir \empty
robocopy /mir \empty folder

首先,让我们回顾一下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并使用它。