Удаление частей имени файла на основе разделителя - PullRequest
0 голосов
/ 10 июня 2019

У меня есть разные имена файлов, которые классифицируются двумя разными способами. Они либо просто имеют код типа: «866655», либо содержат суффикс и префикс «eu_866655_001». Я надеюсь записать в текстовый файл имена файлов в том же формате. Я не могу найти успешный метод удаления суффикса и префикса.

В настоящее время это то, что у меня в цикле в Powershell:

$docs = Get-ChildItem -Path $source | Where-Object {$_.Name -match '.doc*'}

if ($docs.basename -contians 'eu_*')
{
 Write-Output ([io.fileinfo]"$doc").basename.split("_")
}

Я надеюсь превратить "eu_866655_001" в "866655", используя "_" в качестве разделителя.

Я знаю, что ответ смотрит на меня, но я все еще не могу понять это.

1 Ответ

2 голосов
/ 10 июня 2019

Вы можете сделать что-то вроде следующего.Не стесняйтесь настраивать -Filter в команде Get-ChildItem.

$source = 'c:\path\*'
$docs = Get-ChildItem -Path $source -File -Filter "*_*_*" -Include '*.doc','*.docx'
$docs | Rename-Item -NewName { "{0}{1}" -f $_.Basename.Split('_')[1],$_.Extension }

Важно помнить, что для использования переключателя -Include в конце необходим *значения -Path.

Объяснение:

  • -Filter позволяет фильтровать имена, содержащие два подчеркивания, разделяющих три подстроки.
  • -Include позволяет нам перечислять только файлы, заканчивающиеся расширениями .docx и .doc.
  • Rename-Item -NewName поддерживает отложенную привязку скрипта.Это позволяет нам использовать скрипт-блок для выполнения любых необходимых операций для каждого переданного по конвейеру объекта (каждого файла).
  • Поскольку целевые файлы всегда будут иметь два подчеркивания, метод .Split('_') приведет к массиву из трех индексов, ограниченному_.Вы указали, что вам всегда нужна вторая подстрока с разделителями, которая представлена ​​индексом 1 ([1]).
  • Оператор форматирования (-f) объединяет подстроку и расширение вместе, заполняя имя файла.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...