Переименование определенных файлов в папке: изменение только первых цифр

#powershell #rename

#powershell #переименовать

Вопрос:

В папке у меня разные типы файлов. Мне нужно изменить нумерацию файлов определенного типа. Некоторые из них выглядят так: 01 sasasasa; 02 dadadad и т. Д. Мне нужно добавить 5 к этим первым двум цифрам. ПРИМЕР: 06 сасасаса; 07 дададад… Но в других элементах папки для переименования выглядит как 1 bububu; 2 mumumu и т.д. Необходимо добавить 5 и добавить еще один 0 в первую цифру. EX: 06 bububu ; 07 mumumu… Когда я нажимаю 10 нумерацию, это не может быть: 010.

Попробовал этот простой способ:

 Get-ChildItem -Path E:bongbong -Filter *.txt |
%{
Rename-Item -NewName { $_.Name -replace '01','06' } |
Rename-Item -NewName { $_.Name -replace '02','07' } |
Rename-Item -NewName { $_.Name -replace '03','08' } |
Rename-Item -NewName { $_.Name -replace '04','09' } |
Rename-Item -NewName { $_.Name -replace '05','10' }
}
 

В первом примере это не работает. Не удается найти что-то вроде -if в powershell.

Ответ №1:

Вы могли бы попробовать более динамичный подход:

 (Get-ChildItem -Path 'E:bongbong' -Filter '*.txt' -File) | 
    Where-Object { $_.Name -match '^(d{1,2})(.*)' } |
    Rename-Item -NewName {'{0:D2}{1}' -f ([int]$Matches[1]   5), $Matches[2]}
 

Комментарии:

1. Он работает с нумерацией для 1; 2; 3 и т.д. Когда я запускаю это на 01; 02; 03, все в порядке, но 01 переходит в 11. Тем не менее, СПАСИБО!

Ответ №2:

другое решение :

 Get-ChildItem "E:bongbong" -file -Filter "*.txt" | where Name -match "d{1,2} ." | %{
#split by space
$Array=$_.ToString().Split(' ')

#take number and add 5
$Number=[int]$Array[0]   5

#take part of name without number
$PartRight=$Array[1..$Array.Count] -join ' '

#build new name
$NewName="0{0} {1}" -f $Number, $PartRight

#rename file
Rename-Item $_.FullName -NewName $NewName -WhatIf
}