我在文件夹和子文件夹中存储了多个文件。它们几乎都在BaseName的末尾包含_v1。我尝试了以下操作,但出现错误。
Get-ChildItem -Recurse * -Filter "/(_v1)/" |
Rename-Item -NewName { $_.Name -replace '/(_v1)/','' } -WhatIf
错误:
Get-ChildItem:第二个路径片段不能是驱动器或UNC名称。
答案 0 :(得分:2)
尝试一下:
Get-ChildItem "C:\test\ " -recurse -Filter "*_V1*" | % { Rename-Item $_ -NewName $($_.Name -replace "_V1","" ) }
答案 1 :(得分:1)
PowerShell不是Perl。正斜杠并不表示正则表达式,它们只是文字正斜杠,因此您的过滤器表达式和搜索字符串都不会与预期文件匹配。另外,括号(即捕获组)没有任何作用,因此应将其删除。
使用通配符模式作为Get-ChildItem
的过滤器字符串,并将正则表达式替换应用于基名,以避免在文件名中的其他地方意外替换_v1
。
Get-ChildItem -Filter '*_v1.*' -Recurse |
Rename-Item -NewName { ($_.BaseName -replace '_v1$') + $_.Extension }
如果您至少运行PowerShell v3,则可以将参数-File
添加到Get-ChildItem
,以使其不会返回目录。