我有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
答案 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.txt
和new.txt
文件中的条目不对齐,您还可以将文件放入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