问题描述
我想在 powershell 脚本中使用 rimraf 命令来删除某个目录(名为“结果”)中的所有文件和子文件夹。我正在虚拟驱动器(“B”)上测试 rimraf 并且需要使用网络路径,所以我的命令看起来像 properties.subnetOverrides
,但它什么也没做,我无法弄清楚正确的语法。我尝试了许多不同的路径变体,但都没有奏效。
解决方法
rimraf
Node.js 模块和 CLI 通常确实在 Windows 上执行它自己的 globbing,因此 - 给定参数 '\\PC name\B\Results\*'
,作为逐字字符串,被传递 unmodified 为 rimraf
,这意味着 rimraf
不知何故不支持您的 .vhd
驱动器上的 globbing。
注意:-G
命令行选项禁用 globbing,但默认情况下启用。
解决方法是让 PowerShell 进行全局匹配。
以下应该有效,但在 rimraf
v3.0.2 / Node.js v14.15.12 中无效:
# !! Currently does NOT work - even though it should.
# CAVEAT: INSTANTLY DELETES ALL CONTENT IN THE TARGET DIR.
rimraf -G (Get-Item '\\PC name\B\Results\*' -Force).FullName
表面上,传递多个路径(Get-Item
调用导致文件/目录名称的数组,其元素作为单个参数传递)目前已损坏.
因此,使用以下,但是速度很慢,因为 rimraf
是为每个文件和目录单独调用的:
# Should work,but is slow.
# CAVEAT: INSTANTLY DELETES ALL CONTENT IN THE TARGET DIR.
(Get-Item '\\PC name\B\Results\*' -Force).FullName | % { rimraf -G $_ }
当然,您也可以使用 PowerShell 自己的 Remove-Item
cmdlet:
# CAVEAT: If you remove -WhatIf,instantly deletes all content in the target dir.
Remove-Item '\\PC name\B\Results\*' -Recurse -Force -WhatIf
请注意,无论用于删除的工具如何,在 Windows 10 20H2 之前的 Windows 版本上删除目录子树可能会间歇性失败,这是由于之前文件删除的异步行为 - 请参阅{{3} }.