【问题标题】:Powershell -Rename files from "Group-Object" outputPowershell - 从“组对象”输出重命名文件
【发布时间】:2021-07-22 20:47:56
【问题描述】:

所以我有 150 个文件夹,其中包含 100 个这样命名的文件.. M10001662_3269506_DVLA_Original_Complete_archived_201208_2226.pdf M10001662_3269506_DVLA_Original_Complete_archived_201209_2203.pdf M10001662_3269506_DVLA_Original_Complete_archived_201210_2231.pdf M10001662_3269506_DVLA_Original_Complete_archived_201211_2202.pdf

编辑 大约有 10 个不同的文件名,都在末尾添加了“_archived_YYYYMMDD_HHMM.pdf”。我只需要一个(它们都是相同的,所以任何人都会这样做) 每个最后没有“_archived_YYYYMMDD_HHMM.pdf”的文件。注意: Theo 要求提供所需的输出 - 来自许多文件,例如 M10001662_3269506_DVLA_Original_Complete_archived_201208_2226.pdf 至 像 M10001662_3269506_DVLA_Original_Complete.new 这样的一个文件

正在寻找重命名我想用 *.new 保留的文件然后删除 所有 *.pdf 文件(正如我知道的那样),最后重命名 .new 文件返回 *.pdf 每个文件只剩下一个。

希望这能让它更清楚, 结束编辑

我有以下代码,它为我提供了我想要保留的文件名,但我实际上无法操作重命名位..

# Remove duplicate files - based on name/string search
# set the rootfolder to search
$dir = 'O:\UKCH-DATA\Contact Centre\04 - Main\14 - DVLA\_case_files_archive\M10001662'
# loop through the directories directly under $dir
Get-ChildItem -Path $dir -Filter "*.pdf" |
Group-Object -property {$_.BaseName.split('archived', 2)[0]} | 
ForEach-Object { $_.Group | Select-Object -First 1} 
#Write-Output $Filename.VersionInfo |
#Rename-Item $Filename.VersionInfo -NewName -replace ("\.pdf", ".new")

重命名的第一部分有问题,所以请帮忙

【问题讨论】:

    标签: powershell file rename group-object


    【解决方案1】:

    对于重命名部分,您可以使用delay-bind script block

    # ... represents your command from the question.
    ... | Rename-Item -NewName { $_.Name -replace '_archived.+', '.new' } -WhatIf
    

    注意:上面命令中的-WhatIf common parameter预览操作。一旦您确定该操作会执行您想要的操作,请删除 -WhatIf

    注意:我假设您也想从文件名中删除 _archived* 部分,这就是上面的 -replace operation 所做的;如果您只是想将文件扩展名从.pdf 更改为.new,请使用{ $_.BaseName + '.new' }


    由于上述更改了您要保留的文件的文件扩展名,您可以删除留下的.pdf文件:

    Remove-Item -Path $dir\*.pdf -WhatIf
    

    【讨论】:

      【解决方案2】:

      您可以更轻松地做到这一点:

      Get-ChildItem -Path $dir -Filter "*.pdf" |
        Group-Object -property { $_.BaseName.split('archived', 2)[0] } | foreach {
          # rename the file to keep (the 1st file from the group)
          $_.Group | select -First 1 | Rename-Item -NewName ($_.Name + ".pdf")
          # delete the others:
          $_.Group | select -Skip 1 | Remove-Item
      }
      

      【讨论】:

        猜你喜欢
        • 2019-10-15
        • 2015-11-26
        • 1970-01-01
        • 2019-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多