Сохраните начальные символы в именах файлов, удалите все оставшиеся символы с помощью powershell - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть пакет файлов с такими именами, как: 78887_16667_MR12_SMITH_JOHN_713_1.pdf

Мне нужно сохранить первые три набора чисел и удалить все, что находится между третьими "_" и "_1.pdf".

Итак, это: 78887_16667_MR12_SMITH_JOHN_713_1.pdf

Получается так: 78887_16667_MR12_1.pdf

В идеале, я хотел бы иметь возможность просто использовать третью "_" в качестве разрыва, поскольку третий набор чисел иногда включает в себя 3 символа, иногда 4 символа (как в примере), а иногда 5 символов.

Если бы я использовал что-то вроде этого:

Get-ChildItem Default_*.pdf | Rename-Item -NewName {$_.name -replace... 

... а потом я застрял: могу ли я сказать, что все, начиная с 3-го "" и 6-го "", следует заменить на "" (ничего)? Насколько я понимаю, я бы добавил ".Extension", чтобы также сохранить расширение.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

mklement0 дал вам хороший и рабочий ответ.Вот еще один способ сделать это с помощью регулярных выражений.

Get-ChildItem -Filter *.pdf |
    ForEach-Object {
        if ($_.Name -match '(.*?_.*?_.*?)_.*(_1.*)') {
            Rename-Item -Path $_.FullName -NewName $($Matches[1..2] -join '') -WhatIf
        }
    }
0 голосов
/ 11 сентября 2018

Вы можете использовать оператор -split, чтобы разделить свое имя на _ -разделенные токены, извлечь интересующие токены и затем присоединить их снова с помощью оператора -join:

PS> ('78887_16667_MR12_SMITH_JOHN_713_1.pdf' -split '_')[0..2 + -1] -join '_'
78887_16667_MR12_1.pdf

0..2 извлекает первые 3 токена и -1 последний (вы также можете записать этот массив индексов как 0, 1, 2, -1).

Применяется в контексте переименования файлов:

Get-ChildItem -Filter *.pdf | Rename-Item -NewName {
    ($_.Name -split '_')[0..2 + -1] -join '_'
  } -WhatIf

Общий параметр -WhatIf предварительный просмотр операция переименования; удалите его для фактического переименования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...