众所周知,在 *nix 系统上,会以递归方式rm -rf some_directory
删除some_directory
其下的所有文件,而无需确认。
Powershell 中此命令的等效项是什么?
请注意给出的答案这里对于 cmd(使用rmdir
等),在 Powershell 中不起作用。虽然 Powershell 确实有别名rmdir
(Remove-Item
可能是用了一些开关;不确定是哪个),但它没有别名 cmd 样式开关类似/s
。
答案1
这可能就是你要找的东西。似乎用搜索引擎稍微搜索一下就能得到同样的结论。
Remove-Item C:\MyFolder -Recurse -Force
或者简写为:
rm <directory-path> -r -Force
(至少在某些版本的 Powershell 中,您不能将“-Force”缩写为“-f”,因为它与“-Filter”产生歧义。)有关更多信息,请参阅Remove-Item
帮助页面。
答案2
Powershell 中最接近的命令是:
try {
Remove-Item -Recurse -ErrorAction:Stop C:\some_directory
} catch [System.Management.Automation.ItemNotFoundException] {}
rm -rf
在 Unix 中意味着删除一个文件并且:
-r, -R, --recursive remove directories and their contents recursively
-f, --force ignore nonexistent files and arguments, never prompt
Remove-Item -Force
和 不一样rm -f
。
-Force
强制 cmdlet 删除无法更改的项目,如隐藏或只读文件或者只读别名或变量。
为了证明-Force
不会“忽略不存在的文件和参数,从不提示”,如果我这样做rm -r -Force thisDirectoryDoesntExist
,就会导致此错误:
rm : Cannot find path 'C:\thisDirectoryDoesntExist' because it does not exist.
单行代码是rm -r -ErrorAction:SilentlyContinue
,但是这会丢弃不存在的错误。
答案3
您应该使用明确的-force
密钥而不是,-f
因为否则,Powershell 将不知道它是-Filter
还是-Force
。
rm <path> -r -Force
答案4
这是一行代码,其行为类似于rm -rf
。它首先检查路径是否存在,然后尝试将其删除。
if (Test-Path ./your_path) { rm -r -force ./your_path}