#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
}