如何使用列表文件重命名文件?
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.txt
和 new.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
我有 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.txt
和 new.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