使用Powershell重命名文件(可变文件名结构)

时间:2019-02-26 08:10:41

标签: powershell file rename

当前,我在使用powershell重命名文件名时遇到问题。我实际上可以重命名特定文件夹中的文件,但是,如果结构不同,则命令将失败。

示例文件:

test file - 1234 - copy.docx
test file - 1234.pdf

我正在运行以下命令:

Get-ChildItem <location> -file | foreach {
Rename-Item -Path $_.FullName -NewName ($_.Name.Split("-")[0] + $_.Extension) }

我想将文件名保留在最后一个“-”之前。但是,如果我运行命令,则总是在第一个“-”之前获取文件名。

有什么更好的建议吗?

2 个答案:

答案 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) }

(.*)-.*?$选择所有字符(贪心),直到行末最后一个-