Rimraf-powershell脚本glob语法



我想在powershell脚本中使用rimraf命令删除特定目录中的所有文件和子文件夹(名为"Results"(。我正在虚拟驱动器("B"(上测试rimraf,需要使用网络路径,所以我的命令看起来像rimraf '\PC nameBResults*',但它什么都不做,我无法找出正确的语法。我尝试过许多不同的路径变化,但都不起作用。

rimrafNode.js模块和CLI通常在Windows上执行自己的globbing,因此,如果参数'\PC nameBResults*'作为一个逐字逐句的字符串,未经修改地传递给rimraf,则意味着rimraf在某种程度上不支持在.vhd驱动器上执行globbining。

注意:-G命令行选项禁用globbing,但默认情况下是启用的。

的解决方法是让PowerShell执行globbing

以下应该有效,但从rimrafv3.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 nameBResults*' -Force).FullName

似乎,传递多个路径(Get-Item调用导致文件/目录名的数组,其元素作为单独的参数传递(当前已中断。

因此,使用以下,但速度较慢,因为rimraf是为每个文件和目录单独调用的:

# Should work, but is slow.
# CAVEAT: INSTANTLY DELETES ALL CONTENT IN THE TARGET DIR.
(Get-Item '\PC nameBResults*' -Force).FullName | % { rimraf -G $_ }

当然,您也可以使用PowerShell自己的Remove-Itemcmdlet

# CAVEAT: If you remove -WhatIf, instantly deletes all content in the target dir.
Remove-Item '\PC nameBResults*' -Recurse -Force -WhatIf

请注意,无论用于删除的工具是什么,在Windows 10 20H2之前的Windows版本上删除目录子树都可能会间歇性失败,原因是以前的文件删除异步行为-请参阅此答案。

最新更新