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

时间:2015-06-23 20:21:40

标签: powershell rename

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

3 个答案:

答案 0 :(得分:4)

只需将您的两个文件读入两个列表并按如下方式处理:

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

答案 1 :(得分:4)

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

renames.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 :(得分:1)

所以只是对于yucks,这是单行版本。它确实取决于你在运行它时在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