【问题标题】:Rename file with powershell (variable file name structure)使用 powershell 重命名文件(可变文件名结构)
【发布时间】:2023-03-03 07:06:23
【问题描述】:

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

示例文件:

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

我正在运行以下命令:

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

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

对更好的方法有什么建议吗?

【问题讨论】:

    标签: powershell file rename


    【解决方案1】:

    最直接的方法:

    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}
    

    【讨论】:

      【解决方案2】:

      您可以使用RegEx 来实现所需的输出:

      Rename-Item -Path $_.FullName -NewName (($_.Name -replace '(.*)-.*?$','$1') + $_.Extension) }
      

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

      【讨论】:

      • 您应该尝试删除替换后的尾随空格。也使用BaseName,否则如果没有连字符,你最终会得到一个双扩展名。
      猜你喜欢
      • 1970-01-01
      • 2019-07-25
      • 2015-11-26
      • 1970-01-01
      • 2011-07-31
      • 2021-08-27
      • 1970-01-01
      • 2023-03-29
      • 2018-02-07
      相关资源
      最近更新 更多