使用powershell根据另一个文件夹中的文件名批量重命名文件

时间:2011-03-12 11:14:33

标签: powershell

我在名为“01-aaa-bbb-ccc”,“02-ddd-eee-fff”的文件夹中有大量文件,依此类推。在另一个文件夹中,我有一个没有索引的相同文件的早期版本(手动添加以便按特定顺序对它们进行排序)“aaa-bbb-ccc”,“ddd-eee-fff”。我想使用早期版本,但我需要重命名它们添加与其他文件夹中相同的索引。

基本上,如下所示:如果没有索引的文件名是相同的,则以与文件夹a中的onse相同的方式重命名文件夹b中的文件。

有没有办法在PowerShell中做到这一点?不幸的是,我的技能还不够好。 谢谢你的帮助!

3 个答案:

答案 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] }