如何使用列表文件重命名文件?

How to rename files using a list file?

我有 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

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

$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]
}

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

renames.csv =

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

现在您可以使用 Import-Csv 导入您的 "translation sets":

$Renames = Import-Csv '.\renames.csv' -Header "OldName","NewName"

foreach($File in $Renames) {
    Rename-Item $File.OldName $File.NewName
}

真讨厌,这里是单行版本。它确实取决于您在 运行 时位于 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