Сбросить номер файла для новой папки в Recurse Filerename Powershell

Я работаю над пакетным файлом powershell.

Я хочу переименовать все файлы в определенном количестве папок. Мне нужно переименовать его в определенную часть имени папки, за которой следует возрастающий номер. До сих пор мне удалось создать команду переименования в powershell, которая также добавляет числа в файлы.

Get-ChildItem -recurse -filter "*.jpg" | %{$x=1} {Rename-Item $_.FullName -NewName ('{0}-{1}.jpg' -f ($_.FullName.substring(18,8) -replace("-","")) ,$x++)}

Это хорошо работает, как бы я ни хотел сбросить число до 1 для каждой отдельной папки. На данный момент я продолжаю нумеровать по разным папкам. Как сбросить $x обратно на 1 при смене папки?


person Luuk    schedule 04.08.2017    source источник


Ответы (1)


Поскольку вы не можете быть уверены, что каждый каталог нумеруется единицами, я бы создал хэш-таблицу для отслеживания индекса. Что-то типа:

$Directories = @{}
Get-ChildItem -recurse -filter "*.jpg" | ForEach {
    Rename-Item $_.FullName -NewName ('{0}-{1}.jpg' -f ($_.FullName.substring(18,8) -replace("-","")) ,++$Directories[$_.DirectoryName])
}
person iRon    schedule 04.08.2017
comment
Хорошее решение, +1. Но вы можете опустить ForEach Get-ChildItem -r -filter "*.jpg" | Rename-Item -NewName {'{0}-{1}.jpg' -f ($_.FullName.substring(18,8) -replace("-","")) ,++$Directories[$_.DirectoryName]} -WhatIf - person ; 04.08.2017
comment
Спасибо за ваши ответы, работает как шарм. Иногда он пропускал имя файла-1.jpg и начинался с имени файла-2.jpg. Я исправил это, добавив sort. - person Luuk; 07.08.2017