Извлечь текст между двумя подчеркиваниями - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужно переименовать большое количество PDF файлов в следующем формате:

_TEXT[1...n]_NAME[1...n]_SUFFIX[1...n]

Есть ли способ извлечь ТЕКСТ [1 ... n] (количество символов отличается для каждого файла) между двумя подчеркиваниями, используя Power-shell ?

Есть ли способ извлечь SUFFIX [1,2 ... n] (количество символов отличается для каждого файла)?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Вы можете разделить его на подчеркивание. Первый элемент массива - пустая строка.

'_TEXT[1...n]_NAME[1...n]_SUFFIX[1...n]' -split '_'


TEXT[1...n]
NAME[1...n]
SUFFIX[1...n]
0 голосов
/ 04 февраля 2020

Вы можете использовать Get-ChildItem для получения списка файлов PDF. Затем используйте что-то вроде Select-String для извлечения необходимых данных.

$Files = Get-ChildItem -Path SomeFilePath -Filter '*_*_*_*.pdf'
$Files.BaseName | Select-String -Pattern '_([^_]+)' -AllMatches | Foreach-Object {
    $_.Matches[-1].Groups[1].Value # SUFFIX
    $_.Matches[-3].Groups[1].Value # TEXT
}

Поскольку вы не уточняете, что вы хотите делать с извлеченными данными, здесь многое остается желательным.


Если вы просто хотите удалить текст между подчеркиванием с помощью NewValue, вы можете сделать следующее. $Position - это элемент, который вы хотите удалить между двумя подчеркиваниями, начиная с 1.

$Position = 1
Get-ChildItem -filter *_*_*.pdf | Foreach-Object {
    $temp = [collections.generic.list[string]]@($_.Name -split '_')
    $temp.RemoveAt($Position)
    $temp -join '_'
}

Если вы хотите заменить текст между двумя подчеркиваниями, вы можете выполнить следующее и просто изменить $Position для удовлетворения ваших потребностей.

$Position = 1
Get-ChildItem -filter *_*_*.pdf | Foreach-Object {
    $temp = [collections.generic.list[string]]@($_.Name -split '_')
    $temp[$Position] = 'NewValue'
    $temp -join '_'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...