我正在尝试递归重命名文件。 我的示例文件名是:
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
,它显示目标文件名和目标文件名相同。
感谢您的帮助。
答案 0 :(得分:1)
我认为你最好用正则表达式匹配。类似的东西:
GCI $path -recurse | Where{$_.BaseName -match "(.+?)__.{36}$"} | ForEach{Rename-Item -Path $_.FullName -NewName "$($Matches[1])$($_.extension)"}
这将捕获文件名称的开头(假设没有扩展名的文件名以两个下划线结尾,后跟36个字符),然后根据该捕获重命名文件,以及文件的原始扩展名。