当前,我在使用powershell重命名文件名时遇到问题。我实际上可以重命名特定文件夹中的文件,但是,如果结构不同,则命令将失败。
示例文件:
test file - 1234 - copy.docx
test file - 1234.pdf
我正在运行以下命令:
Get-ChildItem <location> -file | foreach {
Rename-Item -Path $_.FullName -NewName ($_.Name.Split("-")[0] + $_.Extension) }
我想将文件名保留在最后一个“-”之前。但是,如果我运行命令,则总是在第一个“-”之前获取文件名。
有什么更好的建议吗?
答案 0 :(得分:2)
最直接的方法:
Get-ChildItem <location> -File | Rename-Item -NewName {
$index = $_.BaseName.LastIndexOf("-")
if ($index -ge 0) {
$_.BaseName.Substring(0, $index).Trim() + $_.Extension
}
else { $_.Name }
}
正则表达式替换:
Get-ChildItem <location> -File |
Rename-Item -NewName {($_.BaseName -replace '(.*)-.*', '$1').Trim() + $_.Extension}
答案 1 :(得分:-1)
您可以使用RegEx
获得所需的输出:
Rename-Item -Path $_.FullName -NewName (($_.Name -replace '(.*)-.*?$','$1') + $_.Extension) }
(.*)-.*?$
选择所有字符(贪心),直到行末最后一个-
。