“rm -rf"Windows也一样?

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

是否有一个预先构建的工具,或者我需要编写一个?

DEL /S不删除目录。

DELTREE已从Windows 2000+中删除

899209 次浏览

Rmdir /s dirname

试试这个命令:

del /s foldername

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

rd /s /q "path"

RMDIR [/S] [/Q] [drive:]路径

RD [/S] [/Q] [drive:]路径

/S除目录本身外,删除指定目录下的所有目录和文件。# EYZ0

/Q安静模式,不询问是否ok删除目录树与/S

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

rd -r "path"

# EYZ0

# EYZ0

# EYZ0

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

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

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

如果你使用的是旧版本的windows,还有deltree。

你可以从这里了解更多: # EYZ0 < / p >

管理:

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

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

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

mkdir \empty
robocopy /mir \empty folder

您可以在windows上安装GnuWin32并使用*nix命令。我安装这个之前,我安装任何其他在薄荷新鲜的拷贝窗口。:)

以下是你需要做的事情……

用下面的代码行创建一个批处理文件

# EYZ0

将批处理文件保存为Remove.bat并将其放在C:\windows

创建以下注册表项

# EYZ0

启动regedit并更新默认值HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default 使用以下值

# EYZ0

这就是它!现在您可以右键单击任何目录并使用RMDIR函数

以下是对我有效的方法:

只是尝试减少路径的长度。 即:将导致这样一个文件的所有文件夹重命名为尽可能小的名称。说出一个字母的名字。继续在文件夹层次结构中向上重命名。 这样u有效地缩短了路径长度。 现在最后尝试直接删除文件

首先,让我们回顾一下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并使用它。

进入该路径并触发该命令。

rd /s /q "FOLDER_NAME"

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

/q:以quiet模式运行rmdir。删除目录时不需要确认。

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

要删除一个目录(不管它是否存在),请使用以下命令:

if exist myfolder ( rmdir /s/q myfolder )

使用Powershell 5.1

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

日志替换为要删除的目录名。

get-childitem从当前路径(.)中递归地搜索具有该名称的子目录。

remove-item删除结果。

通过Powershell

 Remove-Item -Recurse -Force "TestDirectory"

通过命令提示符

https://stackoverflow.com/a/35731786/439130 < a href = " https://stackoverflow.com/a/35731786/439130 " > < / >

公认的答案很好,但假设您已经安装了Node,您可以使用节点库“rimraf”更精确地做到这一点,它允许全局匹配模式。如果你经常使用它(我就是这样),就全局安装它。

yarn global add rimraf

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

rimraf .\**\node_modules

或者使用一行程序,让你避开全局安装,但动态下载包需要稍长时间:

npx rimraf .\**\node_modules

使用风险自负。“按现状”提供的信息。没有经过广泛的测试。

右键单击Windows图标(通常是左下角)>单击“Windows PowerShell(管理员)”>使用这个命令(如果你不小心,你可以很容易地删除你所有的文件):

rd -r -include *.* -force somedir

其中somedir是要删除的非空目录。

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

迟到但重要的答案给任何在windows机器上安装npm包有问题的人,如果你看到错误说“rm -rf...”命令未找到。 windows下可以使用bash cli执行rm命令

对于npm用户,你可以将npm的配置更改为npm config set script-shell "C:\Program Files\Git\bin\bash.exe",这样,如果你要安装的npm包有一个使用rm -rf命令的安装后脚本,你就可以运行rm命令,而不需要更改npm包中的任何内容或禁用安装后脚本配置。(例如,styled-components在安装后脚本中使用rm命令)

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

所以,是的,你可以在windows上使用'rm'命令。

rm -r -fo <path>

是在Windows PowerShell中最接近的。它是的缩写

Remove-Item -Recurse -Force -Path <path>

# EYZ0。

在powershell中rm -recurse -force工作得很好。

作为旁注:

从linux版本用所有子dirs(递归)+强制删除

# EYZ0

, PowerShell

# EYZ0

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

注意:

Remove-Item ALIASE
ri
rm
rmdir
del
erase
rd

Windows注册表编辑器版本5.00

< p > \壳\ [HKEY_CLASSES_ROOT \文件夹删除文件夹\命令]
@ =“;用于cmd . exe / s / c删除文件夹“% V"“< / p >

在powershell中,rm是Remove-Item的别名,所以删除一个文件,

rm -R -Fo the_file

等于

Remove-Item -R -Fo the_file

如果你觉得gnu rm util很舒服,你可以在windows上使用乔科省包管理器来运行rm util。

在powershell中使用choco安装gnu utils:

choco install GnuWin

最后,

rm.exe -rf the_file