Rename-Item : добавьте уникальную числовую последовательность, чтобы предотвратить дублирование имен файлов.

Мне нужен способ переименовать файлы в каталоге, который приведет к ошибке с простым Rename-Item. Для файлов нужен тот же 10-значный код, за которым следует 4-значный заполнитель (пожалуйста, только цифры).

Текущие имена файлов:

01_img_0028.JPG
01_img_0029.JPG
02_img_0028.JPG
02_img_0029.JPG

Учитывая приведенные выше файлы, переименование файлов с split (используя 4 цифры в исходном имени) не удастся, потому что будут файлы с тем же именем:

B0000000000.0028.JPG
B0000000000.0029.JPG
B0000000000.0028.JPG
B0000000000.0029.JPG

У кого-нибудь есть идея обойти это? 4 цифры могут быть любой последовательностью чисел, но было бы здорово, если бы конечный результат выглядел так:

B0000000000.0001.JPG
B0000000000.0002.JPG
B0000000000.0003.JPG
B0000000000.0004.JPG

Вот мой текущий код, который переименует все уникальные файлы и первый из дубликатов, но выдаст ошибку в файлах, которые затем будут повторяющимися именами:

$jpgToRename = GCI -Path $pathToRename -Filter '*.jpg' -R
foreach ($jpg in $jpgToRename) {
    $splitPath = $jpg.FullName.Split("\\")
    $newName = -join ($splitPath[7], ".", $jpg.BaseName, ".PC_850.jpg")
    Rename-Item $jpg.FullName -NewName $newName
}

person Garrett    schedule 05.01.2018    source источник


Ответы (1)


Использование счетчика здесь сделает это простым для ваших нужд:

$jpgToRename = GCI -Path $pathToRename -Filter '*.jpg' -R
$counter = 1
foreach($jpg in $jpgToRename){
    $splitPath = $jpg.FullName.Split("\\")
    $formattedCounter = $counter.ToString("0000")
    $newName =  -Join($splitPath[7], ".",$formattedCounter, $jpg.BaseName, ".PC_850.jpg")
    Rename-Item $jpg.FullName -NewName $newName
    $counter++
}
person trebleCode    schedule 05.01.2018