RM -rf相当于Windows?
我需要一种recursion的方式来删除一个文件夹及其子项,是否有一个预制的工具,或者我需要写一个?
DEL / S不会删除目录。
DELTREE已从Windows 2000+中删除
RMDIR或RD如果您使用经典命令提示符(cmd.exe):
rd /s /q "path"
如果你使用的是PowerShell,你可以使用Remove-Item
(别名为del
, erase
, rd
, ri
, rm
和rmdir
),并且可以使用-Recurse
参数来缩短-r
rd -r "path"
pipe理员:
takeown /r /f folder cacls folder /c /G "ADMINNAME":F /T rmdir /s folder
适用于任何包括sys文件
编辑:我其实也find了解决文件path太长问题的最好方法:
mkdir \empty robocopy /mir \empty folder
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
-
/S
除目录本身之外,删除指定目录中的所有目录和文件。 用于删除目录树。 -
/Q
安静模式,不要问是否可以删除/S
目录树
你可以安装cygwin,里面有rm
和ls
等
转到path并触发此命令。
rd /s /q "FOLDER_NAME"
/ s:删除指定的目录和包括任何文件的所有子目录。 使用/ s删除一棵树。
/ q:以安静模式运行rmdir。 删除目录没有确认。
/? :在命令提示符下显示帮助。
rmdir /S /Q %DIRNAME%
rmdir / s dirname
试试这个命令:
del /s foldername
您可以安装GnuWin32并在Windows上本地使用* nix命令。 我安装之前,我安装了任何其他的一个新鲜的Windows副本。 🙂
这是你需要做的…
用下面一行创build一个batch file
RMDIR /S %1
将您的batch file保存为Remove.bat
并将其放在C:\windows
创build以下registry项
HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)
使用以下值启动regedit
并更新默认值HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default
"c:\windows\REMOVE.bat" "%1"
而已! 现在你可以右键点击任何目录并使用RMDIRfunction
要删除目录(不pipe它是否存在),请使用以下命令:
if exist myfolder ( rmdir /s/q myfolder )
如果您使用的是旧版本的Windows,还有deltree。
我真的很喜欢这个网站查找命令: SS64:删除 – 删除文件
这是什么对我有用:
只要尝试减lesspath的长度。 即:将导致这样的文件的所有文件夹重命名为尽可能最小的名称。 说一个字母的名字。 继续在文件夹层次结构中向上重命名。 通过这个ü有效地减lesspath长度。 现在终于尝试删除文件马上。
首先,让我们回顾一下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
:
- 指定的path不存在。
- 指定的path存在,并且是一个目录。
- 指定的path存在并且是一个文件。
我将忽略整个权限的事情,但是没有人使用权限,或者试图否认自己在Windows中写入对事物的访问权限(好的,这就是一个笑话…)。
首先将ERRORLEVEL
设置为0 ,然后根据目录是否存在,使用不同的命令删除path。 如果path不存在,那么IF EXIST
不会将ERRORLEVEL
设置为0,因此,首先将ERRORLEVEL
设置为0是正确检测成功的必要条件,这样可以模仿正常的rm -rf
使用。 用IF EXIST
来保护RD
是很有必要的,因为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,并使用它。
删除/ s / q目录删除