我在名为“01-aaa-bbb-ccc”,“02-ddd-eee-fff”的文件夹中有大量文件,依此类推。在另一个文件夹中,我有一个没有索引的相同文件的早期版本(手动添加以便按特定顺序对它们进行排序)“aaa-bbb-ccc”,“ddd-eee-fff”。我想使用早期版本,但我需要重命名它们添加与其他文件夹中相同的索引。
基本上,如下所示:如果没有索引的文件名是相同的,则以与文件夹a中的onse相同的方式重命名文件夹b中的文件。
有没有办法在PowerShell中做到这一点?不幸的是,我的技能还不够好。 谢谢你的帮助!
答案 0 :(得分:2)
这是一种类似的方法。适用于我的一小部分测试:
$newNames = Get-ChildItem ..\a -Name
# Cd into b dir
Get-ChildItem | Foreach {$name = $newNames -match "\d+-$_";if ($name){$_}} |
Rename-Item -NewName {$name}
答案 1 :(得分:1)
$ht = @{}
Get-ChildItem a\* | Select-Object -ExpandProperty name | ForEach-Object {
$null = $_ -match '(\d+)-(.*)'
$ht[$Matches[2]] = $Matches[1]
}
Get-ChildItem b\* | ForEach-Object { Rename-Item $_ ($ht[$_.name] + '-' + $_.name) }
首先,我创建一个哈希表,其中包含没有索引的文件名到要使用的索引的映射。然后,它会用于相应地重命名文件夹 b 中的项目。
答案 2 :(得分:0)
Get-ChildItem .\a\* | Select -Expand Name | %{ $_ -match "([\d]+)-(.+)" } | `
%{ Rename-Item -WhatIf .\b\$($matches[2]) $matches[0] }