2011-03-12 70 views
3

我在名爲「01-aaa-bbb-ccc」,「02-ddd-eee-fff」等文件夾中有大量文件。在另一個文件夾中,我有沒有索引的相同文件的早期版本(手動添加以便按特定順序對其進行排序)「aaa-bbb-ccc」,「ddd-eee-fff」。我想使用早期版本,但我需要重新命名它們,添加與其他文件夾中相同的索引。根據另一個文件夾中的文件名使用powershell批量重命名文件

基本上,類似如下內容:如果沒有索引的文件名相同,則以與文件夾中的onse相同的方式重命名文件夾b中的文件。

有沒有辦法在PowerShell中做到這一點?不幸的是,我的技能不夠好。 謝謝你的幫助!

回答

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中的項目。

+0

嗨,非常感謝您的幫助。我嘗試過,但它沒有奏效:它prepends - 文件名(文件現在命名爲「-aaa-bbb -ccc「),但它沒有添加與其他文件夾中相同的索引號。如果我說得對,我用索引號代替文件夾中的一個,然後用\ – Libero 2011-03-12 12:09:39

+0

這個文件夾替換這個文件,這在我的測試中有效。 – dugas 2011-03-12 17:38:14

+0

@Libero:的確如此,我打算使用它。實際上,它對我來說工作得很好。 – Joey 2011-03-12 21:23:24

0
Get-ChildItem .\a\* | Select -Expand Name | %{ $_ -match "([\d]+)-(.+)" } | ` 
%{ Rename-Item -WhatIf .\b\$($matches[2]) $matches[0] } 
2

這裏有一個類似的方法。在我的小測試中工作:

$newNames = Get-ChildItem ..\a -Name 
# Cd into b dir 
Get-ChildItem | Foreach {$name = $newNames -match "\d+-$_";if ($name){$_}} | 
       Rename-Item -NewName {$name} 
+0

完美的工作!非常感謝! – Libero 2011-03-12 18:09:43

+0

@Libero然後將答案標爲正確! – Junto 2013-01-31 15:03:28

相關問題