“rm -rf” equivalent for Windows?
我需要一种递归删除文件夹及其子项的方法。
是否有预制的工具,或者我需要写一个?
如果您使用的是经典命令提示符(cmd.exe),则为RMDIR或RD:
1 | rd /s /q"path" |
如果您使用的是PowerShell,则可以使用
1 | rd -r"path" |
管理员:
1 2 3 | takeown /r /f folder cacls folder /c /G"ADMINNAME":F /T rmdir /s folder |
适用于任何包括sys文件的内容
编辑:我实际上找到了最好的方法,也解决了文件路径太长的问题:
1 2 | mkdir \empty robocopy /mir \empty folder |
-
/S 除目录本身外,还删除指定目录中的所有目录和文件。用于删除目录树。 -
/Q 安静模式,不要问是否可以使用/S 删除目录树
转到路径并触发此命令。
1 | rd /s /q"FOLDER_NAME" |
/ s:删除指定的目录和所有子目录,包括任何文件。使用/ s删除树。
/ q:以安静模式运行rmdir。删除目录而不确认。
/? :在命令提示符下显示帮助。
您可以安装cygwin,其中包含
要删除目录(无论是否存在),请使用以下命令:
1 | if exist myfolder ( rmdir /s/q myfolder ) |
试试这个命令:
1 | del /s foldername |
首先,让我们回顾一下
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
有三种情况,
我将忽略整个权限的事情,但没有人使用权限或试图拒绝自己写入Windows中的东西访问(好吧,这意味着一个笑话......)。
首先将
以下脚本片段假定DELPATH是预先引用的。 (当你执行
1 2 3 4 5 6 7 8 9 10 11 | : # 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并使用它。
rmdir / s dirname
这是你需要做的......
使用以下行创建批处理文件
将批处理文件另存为
创建以下注册表项
emove Directory (RMDIR)
启动
emove Directory (RMDIR)\default
具有以下值
EMOVE.bat""%1"
而已!现在,您可以右键单击任何目录并使用RMDIR功能
您可以在Windows上安装GnuWin32并在本机上使用* nix命令。我安装这个之前,我在一个薄薄的新的Windows副本上安装任何其他东西。 :)
自行承担使用风险。提供的信息"按原样"。没有经过严格的考验。
右键单击Windows图标(通常是左下角)>单击"Windows PowerShell(Admin)">使用此命令(如果不小心,可以轻松删除所有文件):
1 | rd -r -include *.* -force somedir |
其中
请注意,对于外部附加磁盘或有问题的磁盘,Windows有时表现为奇怪 - 它在删除(或任何复制尝试)中不会出错,但目录不会按照指示删除(或不复制)。 (我发现在这种情况下,至少对我来说,@ n_y在他的回答中给出的命令会产生错误,例如'get-childitem:文件或目录已损坏且无法读取。'因此在PowerShell中)
使用Powershell 5.1
1 | get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force |
使用要删除的目录名替换日志。
get-childitem从当前路径(。)递归搜索子目录。
remove-item删除结果。
接受的答案很好,但假设您安装了Node,您可以使用节点库"rimraf"更精确地完成此操作,它允许使用globbing模式。如果您经常使用它(我这样做),只需全局安装即可。
1 | yarn global add rimraf |
然后,例如,我经常使用的模式:
1 2 | rimraf .\** ode_modules |
或者对于允许你躲避全局安装的单行程序,但是对于程序包动态下载需要稍长的时间:
1 2 | npx rimraf .\** ode_modules |
通过Powershell
1 | Remove-Item -Recurse -Force"TestDirectory" |
通过命令提示符
https://stackoverflow.com/a/35731786/439130
这对我有用:
试着减少路径的长度。
即::将导致此类文件的所有文件夹重命名为尽可能小的名称。说一个字母的名字。继续在文件夹层次结构中向上重命名。
通过这个你有效地减少了路径长度。
现在终于尝试立即删除文件。
如果您使用的是旧版Windows,也可以使用deltree。
我真的很喜欢这个网站寻找命令:
SS64:删除 - 删除文件
del / s / q目录被删除