“rm -rf”相当于Windows?

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

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

DEL /S不删除目录。

DELTREE已从Windows 2000+中删除


#1楼

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

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

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功能


#2楼

这对我有用:

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


#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. 指定的路径存在且是文件。

我将忽略整个权限的事情,但没有人使用权限或试图拒绝自己写入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并使用它。


#4楼

del / s / q目录被删除


#5楼

转到路径并触发此命令。

rd /s /q "FOLDER_NAME"

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

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

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


#6楼

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

if exist myfolder ( rmdir /s/q myfolder )

#7楼

使用Powershell 5.1

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

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

get-childitem从当前路径(。)递归搜索子目录。

remove-item删除结果。


#8楼

通过Powershell

 Remove-Item -Recurse -Force "TestDirectory"

通过命令提示符

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


#9楼

接受的答案很好,但假设您安装了Node,您可以使用节点库“rimraf”更精确地完成此操作,它允许使用globbing模式。 如果您经常使用它(我这样做),只需全局安装即可。

yarn global add rimraf

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

rimraf .\**\node_modules

或者对于允许你躲避全局安装的单行程序,但是对于程序包动态下载需要稍长的时间:

npx rimraf .\**\node_modules

#10楼

自行承担使用风险。 提供的信息“按原样”。 没有经过严格的考验。

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

rd -r -include *.* -force somedir

somedir是您要删除的非空目录。

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


#11楼

rmdir / s dirname


#12楼

试试这个命令:

del /s foldername

#13楼

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

rd /s /q "path"

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

rd -r "path"

#14楼

rmdir /S /Q %DIRNAME%


#15楼

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

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

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

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


#16楼

你可以安装cygwin,它有rmls等。


#17楼

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

我真的很喜欢这个站点来查找命令: SS64:Del - 删除文件


#18楼

管理员:

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

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

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

mkdir \empty
robocopy /mir \empty folder

#19楼

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

发布了0 篇原创文章 · 获赞 2 · 访问量 7086

猜你喜欢

转载自blog.csdn.net/asdfgh0077/article/details/104086679
rm