powershell-递归调用批量重命名文件名

时间:2014-08-08 19:47:07

标签: powershell recursion

我正在尝试递归重命名文件。 我的示例文件名是:

  

2011.02.21工作计划 - Greg Graham_v1.0__977a6c84-340a-442f-997e-aea94308b382.pdf

我想删除以两个下划线+ 36个字符的标识符开头的字符串__977a6c84-340a-442f-997e-aea94308b382

因此结果文件名为:

  

2011.02.21工作计划 - Greg Graham_v1.0.pdf

所有文件都在提到的文件夹或子文件夹中。 我正在使用以下PowerShell:

Get-ChildItem -Path E:\Recover\test  -Recurse | Rename-Item -NewName{$_.name -replace{$_.name.SubString({$_name.IndexOf("__")},38)},""}

当我使用-WhatIf时,它会显示所有文件。但如果我没有使用-WhatIf。它不会删除任何东西。 使用-WhatIf,它显示目标文件名和目标文件名相同。 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为你最好用正则表达式匹配。类似的东西:

GCI $path -recurse | Where{$_.BaseName -match "(.+?)__.{36}$"} | ForEach{Rename-Item -Path $_.FullName -NewName "$($Matches[1])$($_.extension)"}

这将捕获文件名称的开头(假设没有扩展名的文件名以两个下划线结尾,后跟36个字符),然后根据该捕获重命名文件,以及文件的原始扩展名。