重命名文件名以排除前几个部分Powershell

时间:2015-07-23 14:14:37

标签: powershell rename

我有超过一百万个这样的文件:First_Last_MI_DOB_和更多信息。有没有办法我可以运行一个重命名脚本,可以从文件名中删除第一个,最后一个,Mi和DOB,但保留之后的东西?谢谢。

1 个答案:

答案 0 :(得分:0)

根据我对这个问题的回答编辑:Parse and Switch Elements of Folder Names using Powershell

# Path to folder
$Path =  '.\'

# Regex to match "ID_000000..."
$Regex = 'ID_\d+.*$'

# Get all objects in path
Get-ChildItem -Path $Path |
    # Select only objects that are not directory and name matches regex
    Where-Object {!$_.PSIsContainer -and $_.Name -match $Regex} |
        # For each such object
        ForEach-Object {
            # Rename object
            Rename-Item -Path $_.FullName -NewName $Matches[0]
        }

更新#1:您似乎需要编写一个匹配名称所需部分的正则表达式,然后使用它来重命名文档。

假设文件名是x-John_Doe_._DOB_01-11-1990_M_ID_000000_TitleofDocument_DateofDocument_Docpagenu‌​mber_,以下是几个例子:

  • 正则表达式(https://regex101.com/r/gI0fZ2/2):(ID_\d+.*)$ - 将匹配ID_{ONE_OR_MORE_DIGITS}{ANY_CHARACTERS}
  • 结果:ID_000000_TitleofDocument_DateofDocument_Docpagenu‌​mber_
  • 正则表达式(https://regex101.com/r/gI0fZ2/1):\d{4}_(M|F)_(.*)$ - 将匹配{4_DIGITS}_M_{or}_F_并捕获捕获组中的所有内容。
  • 结果:
    • 第一场比赛 - M
    • 第二场比赛(使用的比赛) - ID_000000_TitleofDocument_DateofDocument_Docpagenu‌​mber_

更新#2:

  

每个文件中的所有名称都是不同的,长的是不同的ID。   例如:John_Doe_DOB_01/01/01_ID_000000和下一个文件名   可能是:John_Smith_DOB_01/02/01_ID_100000等等。我在想我   只想以字符串形式读取文件名,将其拆分为_   然后从[4]和之后创建新文件名。在那儿   一种方法吗?

当然,你可以这样做,但我建议使用正则表达式方法,因为它适用于每个具有ID_0xxxx字符串的文件名,无论如何。我用第一个正则表达式修改了我的初始示例,所以它应该适合你。

但如果您想尝试拆分方法,请按以下步骤操作:

# Path to folder
$Path =  '.\'

# Filename separator
$Separator = '_'

# Get all objects in path
Get-ChildItem -Path $Path |
    # Select only objects that are not directory and name matches regex
    Where-Object {!$_.PSIsContainer} |
        # For each such object
        ForEach-Object {
            # Generate new name
            $NewName = ($_.Name -split $Separator | Select-Object -Skip 4) -join $Separator

            # Rename object
            Rename-Item -Path $_.FullName -NewName  $NewName
        }