Windows PowerShell的"rm -rf"等效命令是什么?

4

我已经阅读了问题“rm -rf”在Windows中的等效命令?。我也尝试了以下命令:

$ rm app
$ rmdir /s /q app
$ rmdir -s -q app
$ rd /s /q app

还有许多其他变化。 它总是提示我:

C:\ThisDirectoryDoesNotExist\app\上的项目具有子项,并且未指定Recurse参数。 如果您继续, 所有子项都将被删除。 您确定要继续吗?

[Y] 是 [A] 全部是 [N] 否 [L] 全部否 [S] 暂停 [?] 帮助(默认为“Y”):A

当我选择 A 时,它会抛出一个错误:

rm:无法删除项目 C:\ThisDirectoryDoesNotExist\app.git\objects\pack\pack-45e426475eb08ff5042bf88556fbedd3956fba53.idx:您没有足够的访问权限执行此操作。

我该怎么做?


2
rd /q /s 是用于 CMD 的命令,但是看起来你正在运行 PowerShell。你完全可以使用 CMD 来代替。而且这个问题与你正在使用的终端没有任何关系。这是一个关于 shell 的问题。 - undefined
@ErykSun 我遇到了这个错误 Remove-Item : 无法找到接受参数 '/s' 的位置参数。。我也可以使用git bash轻松删除文件夹。但这并不能回答我的问题。当然,它与新的Windows终端预览版有关,程序员们很快将默认使用它。它具有潜力。试一试,你就会明白。我只是需要使用这个新终端来删除文件夹。我不明白为什么这么难理解。 - undefined
1
终端不是shell。你似乎把两者搞混了。CMD、PowerShell、bash等都可以在经典的conhost.exe终端/控制台中工作,这是Windows控制台应用程序在没有附加终端的情况下分配的一个。控制台或终端提供了文本输入和输出的用户界面,对于程序来说,它们在API函数和IOCTLs或标准转义序列方面提供了不同程度的UI支持。 - undefined
1
再次强调,你正在使用PowerShell,其中rdremove-item的别名,并且不支持与CMD的rd命令相同的语法。打开一个CMD shell来运行rd /q /s -- 在你喜欢的终端或控制台中。如果你从资源管理器中运行cmd.exe,你将得到经典的conhost.exe终端。在Windows Terminal中,你可以在新标签页中运行CMD,或者直接从PowerShell中运行cmd.exe。 - undefined
@ErykSun 啊,这更加令人困惑了,不管怎样,我找到了答案 :) - undefined
2个回答

37

只需按建议指定递归参数:

rm -r app
如果文件夹中包含隐藏或只读文件,请添加-Force参数:
rm -r -fo app

这是缩写形式:

Remove-Item -Recurse -Force -Path app
如果您没有适当的访问权限,那么当然无法删除它。

背景

rmdirrd是您可以在命令提示符上调用的命令(而不是可执行文件)。如果您安装了MinGW环境,则这三个术语也可能指向可执行文件。但是它们在PowerShell中将不可用,因为PowerShell使用这些单词作为cmdlet Remove-Item的别名。

PS> 'rm', 'rmdir', 'rd' | Get-Command

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           rm -> Remove-Item
Alias           rmdir -> Remove-Item
Alias           rd -> Remove-Item
如果您有可用的一些工具作为可执行文件,您仍可以通过指定其完整路径在PowerShell中访问它们,例如:

如果你有一些工具作为可执行文件可用,你仍然可以通过指定它们的完整路径在PowerShell中访问它们,例如:

PS> C:\path\to\MinGW\msys\1.0\bin\rm.exe

但让我们仅使用Remove-Item。由于它是一个命令,它希望传递某些参数或开关,例如-Recurse。在此之前,您可以缩写它们,以使它们与其他可能的参数相比保持不含糊。因此,您可以使用:

rm -r

比如在bash中看起来像这样,您也可以像这样传递两个参数:

rm -rf

当您向PowerShell发送此命令时,它将尝试将 -rf 与以 rf 开头的参数匹配,但该参数不存在。在PowerShell中,您必须将每个参数单独传递给cmdlet。要传递 -Force 参数,您必须至少写入 -fo,因为还有一个参数 -Filter,因此 -f 将是模糊的。

总之,要从bash在PowerShell中获得 rm -rf 的等效命令,您至少需要编写:

rm -r -fo

@deadcoder0904 我在我的解决方案中添加了细节,涉及到可能存在于你的目录中的隐藏文件,因为它似乎是一个git仓库。 - undefined
1
第二个命令 rm -r -fo app 运行得非常完美。感谢你给出了一个实际的答案。 - undefined
rm -r 单独清除了我的目录中的所有内容,而且没有提示,那么加上 -fo 的意义是什么呢? - undefined
如果您想删除隐藏或只读文件,则需要使用“-Force”。 - undefined

-3
尝试使用这个:-
rmdir /s directory_name

它给我一个错误Remove-Item:找不到接受参数的位置参数 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接