“rm -rf”相当于Windows?

时间:2008-09-18 23:08:29

标签: windows cmd wsh

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

是否有预制的工具,或者我需要写一个?

DEL /S不会删除目录。

DELTREE已从Windows 2000 +中删除

24 个答案:

答案 0 :(得分:587)

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

rd /s /q "path"

如果您使用的是PowerShell,则可以使用Remove-Item(别名为deleraserdrirmrmdir)并且-Recurse参数可以缩短为-r

rd -r "path"

答案 1 :(得分:128)

管理员:

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

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

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

mkdir \empty
robocopy /mir \empty folder

答案 2 :(得分:105)

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

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

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

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

答案 3 :(得分:18)

您可以安装cygwin,其中包含rm以及ls等。

答案 4 :(得分:17)

转到路径并触发此命令。

rd /s /q "FOLDER_NAME"

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

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

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

答案 5 :(得分:6)

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

if exist myfolder ( rmdir /s/q myfolder )

答案 6 :(得分:5)

rmdir /S /Q %DIRNAME%

答案 7 :(得分:3)

尝试此命令:

del /s foldername

答案 8 :(得分:3)

rmdir / s dirname

答案 9 :(得分:3)

首先,让我们回顾一下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. 指定的路径存在并且是文件。
  4. 我将忽略整个权限的事情,但是没有人使用权限或试图拒绝自己在Windows中对事物进行写访问(好吧,这本来就是个笑话......)。

    首先set ERRORLEVEL to 0然后删除路径,只有它存在,使用不同的命令,具体取决于它是否是目录。如果路径不存在,则IF EXIST不会将ERRORLEVEL设置为0,因此必须先将ERRORLEVEL设置为0,才能以模仿正常rm -rf的方式正确检测成功用法。使用RD保护IF EXIST是必要的,因为RDrm -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并使用它。

答案 10 :(得分:2)

这是你需要做的......

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

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函数

答案 11 :(得分:2)

最后一个重要的答案,适用于在Windows计算机上安装npm软件包时遇到问题的任何人,如果发现错误并提示“ rm -rf...”命令。 您可以使用bash cli在Windows上运行rm命令。

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

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

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

答案 12 :(得分:2)

rm -r -fo <path>

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

的缩写
Remove-Item -Recurse -Force -Path <path>

(more details)

答案 13 :(得分:2)

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

答案 14 :(得分:1)

在 powershell 中,rm -recurse -force 运行良好。

答案 15 :(得分:1)

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

yarn global add rimraf

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

rimraf .\**\node_modules

或者是一种单行代码,可以让您避开全局安装,但是对于动态下载软件包,则花费更长的时间:

npx rimraf .\**\node_modules

答案 16 :(得分:0)

作为侧节点:

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

$ rm -rf ./path

到 PowerShell

PS> rm -r -fo ./path

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

注意:

Remove-Item ALIASE
    ri
    rm
    rmdir
    del
    erase
    rd

答案 17 :(得分:0)

Windows 注册表编辑器 5.00 版

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

答案 18 :(得分:0)

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

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

rd -r -include *.* -force somedir

somedir是要删除的非空目录。

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

答案 19 :(得分:0)

通过Powershell

 Remove-Item -Recurse -Force "TestDirectory"

通过命令提示符

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

答案 20 :(得分:0)

使用Powershell 5.1

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

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

获取子项,从当前路径(。)递归搜索名称为children的子目录。

删除项目删除结果。

答案 21 :(得分:0)

这对我有用:

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

答案 22 :(得分:-1)

如果您使用的是旧版Windows,也可以使用deltree。

我真的很喜欢这个网站寻找命令: SS64: Del - Delete Files

答案 23 :(得分:-3)

del / s / q directorytobededeleted