我需要一种方法来递归删除文件夹及其子文件。
是否有预制的工具,或者我需要写一个?
DEL /S
不会删除目录。
DELTREE
已从Windows 2000 +中删除
答案 0 :(得分:587)
RMDIR或RD如果您使用的是经典命令提示符(cmd.exe):
rd /s /q "path"
如果您使用的是PowerShell,则可以使用Remove-Item
(别名为del
,erase
,rd
,ri
,rm
和rmdir
)并且-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
的地方:
我将忽略整个权限的事情,但是没有人使用权限或试图拒绝自己在Windows中对事物进行写访问(好吧,这本来就是个笑话......)。
首先set ERRORLEVEL
to 0然后删除路径,只有它存在,使用不同的命令,具体取决于它是否是目录。如果路径不存在,则IF EXIST
不会将ERRORLEVEL
设置为0,因此必须先将ERRORLEVEL
设置为0,才能以模仿正常rm -rf
的方式正确检测成功用法。使用RD
保护IF 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并使用它。
答案 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>
答案 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"
通过命令提示符
答案 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