Пакетное переименование файлов в соответствии с именами файлов в другой папке с PowerShell - PullRequest
3 голосов
/ 12 марта 2011

У меня есть большое количество файлов в папке с именами "01-aaa-bbb-ccc", "02-ddd-eee-fff" и так далее. В другой папке у меня есть ранняя версия тех же файлов без индекса (который был добавлен вручную для сортировки их в определенном порядке) «aaa-bbb-ccc», «ddd-eee-fff». Я хотел бы использовать более раннюю версию, но мне нужно переименовать их, добавив тот же индекс, что и в другой папке.

По сути, что-то вроде: переименуйте файлы в папке b так же, как в папке a, если имя файла без индекса совпадает.

Есть ли способ сделать это в powershell? К сожалению, мои навыки не достаточно хороши для этого. Спасибо за вашу помощь!

Ответы [ 3 ]

2 голосов
/ 12 марта 2011

Вот похожий подход. Работает в моем небольшом тестировании:

$newNames = Get-ChildItem ..\a -Name
# Cd into b dir
Get-ChildItem | Foreach {$name = $newNames -match "\d+-$_";if ($name){$_}} | 
                Rename-Item -NewName {$name}
1 голос
/ 12 марта 2011
$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 голосов
/ 12 марта 2011
Get-ChildItem .\a\* | Select -Expand Name | %{ $_ -match "([\d]+)-(.+)" }  | `
%{ Rename-Item -WhatIf .\b\$($matches[2]) $matches[0] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...