Из ваших комментариев, где вы поместили новые примеры (кстати, вы должны были отредактировать свой вопрос и добавить их туда), я понимаю, вам нужно два разных теста регулярных выражений.
Один из них для имен файлов, которые включают слово Load
, а другое - там, где это не так, но вместо этого содержит строку типа 00S308267-RateConfirmation
.
. Мне это кажется довольно беспорядочным, но это можно сделать, например, так:
Get-ChildItem -Path 'D:\Test' -Filter '*.pdf' -File -Recurse |
Rename-Item -NewName {
switch -Regex ($_.BaseName) {
'Load\s*\d+' { '{0}.pdf' -f ($_ -replace '.*(Load\s*\d+)2020-.*', '$1') ; break}
'\d+S\d+-RateConfirmation' { 'Load {0}.pdf' -f ($_ -replace '.*(S\d+).*', '$1') ; break}
}
}
До:
D:\TEST
0407202 Load 3206618002020-04-07T14 04 07+00 00doc882732300.pdf
04292020rkinnairdspotinc.comRE CAN YOU DO THESE 202029T20 53 58+00 00S308267-RateConfirmation.pdf
101268 04062020MACNN@CN.comNaveLoad 3206078552020-6.pdf
Load 3202895372020-04-06T22 00 03+00 00doc882532627.pdf
После:
D:\TEST
Load 320289537.pdf
Load 320607855.pdf
Load 320661800.pdf
Load S308267.pdf