【问题标题】:How to rename files using a list file?如何使用列表文件重命名文件?
【发布时间】:2015-09-09 20:09:47
【问题描述】:

我有 100 个文件,我想根据相关列表以特定方式重命名。与其重复相同的 cmdlet,如下所示,我想将 cmdlet 指向几个包含旧名称和新名称的列表文件(如下),例如 old.txt 和 new.txt。如何使用 PowerShell 执行此操作?

示例:

Rename-Item -Path "E:\MyFolder\old1.pdf" -NewName new1.pdf
Rename-Item -Path "E:\MyFolder\old2.tif" -NewName new2.pdf
Rename-Item -Path "E:\MyFolder\old3.pdf" -NewName new3.pdf

列出文件:

old.txt =

old1.pdf
old2.tif
old3.pdf

new.txt =

new1.pdf
new2.tif
new3.pdf

【问题讨论】:

    标签: powershell rename


    【解决方案1】:

    为避免 old.txtnew.txt 文件中的条目之间的不对齐,您还可以将文件放入 CSV 文件中:

    重命名.csv =

    old1.pdf,new1.pdf
    old2.tif,new2.tif
    old3.pdf,new3.pdf
    

    现在您可以使用Import-Csv 导入您的“翻译集”:

    $Renames = Import-Csv '.\renames.csv' -Header "OldName","NewName"
    
    foreach($File in $Renames) {
        Rename-Item $File.OldName $File.NewName
    }
    

    【讨论】:

    • 我喜欢这个和上面的答案。不确定哪个应该得到绿色检查 - 也许人群会指出它。谢谢
    【解决方案2】:

    只需将您的两个文件读入两个列表并像这样处理它们:

    $old = Get-Content 'old.txt'
    $new = Get-Content 'new.txt'
    
    Set-Location '$:\MyFolder'
    
    for ($i = 0; $i -lt $old.Count; $i++) {
      Rename-Item $old[$i] $new[$i]
    }
    

    【讨论】:

    【解决方案3】:

    所以只是为了恶心,这里是单行版本。它确实取决于您在运行它时是否在 C:\MyFolder 目录中,但这可以很容易地更改为变量:

    Get-Content new.txt -PipelineVariable NewName | 
        Foreach {$oldNames = Get-Content old.txt;$i=0} {Get-ChildItem $oldNames[$i++]} | 
        Rename-Item -NewName {$NewName} -WhatIf
    

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多