Windows是否等效于“ rm -rf”?


508

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

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

DEL /S 不会删除目录。

DELTREE 已从Windows 2000+中删除


1
del / s(a)根本不起作用(仅在某些版本中可用)或(b)离开顶级目录但删除其下的所有内容还是(c)删除所有文件时离开所有目录?
wnoise

@Aaron,答案c,您需要使用rmdir / s删除目录和文件。

31
format c:安装Linux 真的不是吗?我当然是在开玩笑。
Basile Starynkevitch 2015年

Answers:


694

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

rd /s /q "path"

RMDIR [/ S] [/ Q] [drive:]路径

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

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

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

如果你正在使用PowerShell的你可以使用Remove-Item(这是化名为deleraserdrirmrmdir),并需要一个-Recurse可以缩短到说法-r

rd -r "path"

84
值得指出的是,对于大量文件,rmdir / s / q通常比资源管理器中的等效“选择目录,移位+删除”操作快得多。

9
这不会像rm -rf那样删除文件,并且在目录不存在时也会返回非零值,因此rd /s /q foo && echo "yay"如果目录“ foo”不存在,则将失败。
Dirk Groeneveld

17
如果目录怎么办。不为空,一些文件得到Access is denied和其他The process cannot access the file because it is being used by another process
尤金2014年

6
我只是在7个中尝试过,您需要做/ S和/ Q(大写)
福特

2
神秘在这里。我知道我尝试了此命令,如果目录树中有文件,则该命令不起作用;现在我回去。。。魔术似乎起作用了。还有其他人会遇到与此不一致的行为吗?!
亚历克斯·霍尔

139

管理员:

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

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

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

mkdir \empty
robocopy /mir \empty folder

3
我的英雄!\空,则每一次疯狂的文件夹里面,一个可以这样做:和一个提示:您创建位于C你的空文件夹robocopy /mir c:\empty .
莱昂·佩尔蒂埃

takeown当我错误地使用rsync从Linux系统复制文件夹时,这对我有所帮助,并且我没有删除该文件夹的特权...即使robocopy也无法正常工作。谢谢
贾达(Jarda)2016年

1
很好的答案。有用。(页面上的所有其他答案都没有)。但是不推荐使用cacls。请问有可能做出当代答案吗?第二个变体已经可以使用,并且不建议使用。
Gangnus

这对我没有任何帮助。有人可以解释一下它应该如何工作吗?(自动复制)-它可能会删除文件夹的内容,但不会删除文件夹本身
拉尔夫(Ralf)

114

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

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

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

  • /Q 安静模式,不要问是否可以使用以下命令删除目录树 /S


13
感谢您的参数说明。不幸的是,已接受的答案没有这样做。
托马斯

1
最简单,完美的答案。应该是被接受的。
Artif3x


19

转到路径并触发此命令。

rd /s /q "FOLDER_NAME"

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

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

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


9

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

if exist myfolder ( rmdir /s/q myfolder )


6

可以接受的答案很好,但是假设您已经安装了Node,则可以使用节点库“ rimraf”(可以使用globbing模式)更加精确地进行此操作。如果您经常使用(我愿意),则只需全局安装即可。

yarn global add rimraf

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

rimraf .\**\node_modules

还是一种单行代码,让您避开全局安装,但是对于软件包动态下载,它花费的时间稍长一些:

npx rimraf .\**\node_modules

2
一个与操作系统无关的可靠解决方案。
Denialos '19

5

试试这个命令:

del /s foldername

w / rmdir / s / q为我工作,因为有些文件被锁定,而rmdir会失败。del / foldername对锁定的文件进行核对,然后使rmdir摆脱根目录。真好
bbqchickenrobot 2014年


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不设置ERRORLEVEL为0,如果路径不存在,所以设置ERRORLEVEL为0第一个必要的方式模仿正常的正确检测成功rm -rf使用。保护RDwith IF EXIST是必要的,因为RD和不同rm -f,如果目标不存在,则会抛出错误。

以下脚本片段假定DELPATH已被前置。(当您执行诸如此类的操作时,这是安全的SET DELPATH=%1。尝试放入ECHO %1a .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,然后使用它。



3

这是您需要做的...

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

RMDIR /S %1

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

创建以下注册表项

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

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

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

而已!现在您可以右键单击任何目录并使用RMDIR函数


3

使用Powershell 5.1

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

用您要删除的目录名称替换日志

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

remove-item删除结果。


2

您可以在Windows上本地安装GnuWin32并使用* nix命令。我先安装此版本,然后再在薄荷的Windows副本上安装其他任何组件。:)


2

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

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

rd -r -include *.* -force somedir

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

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


1

但是对在Windows机器上安装npm软件包有困难的任何人,如果您看到错误提示“ rm -rf...找不到命令” ,则是最重要的回答。您可以使用bash cli在Windows上运行rm命令。

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

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

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


0

这是对我有用的东西:

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



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.