Разделенная строка в Powershell

#powershell #split

Вопрос:

У меня есть sth, записанный в файле «.ini», который я хочу прочитать из PS. Файл дает значение «notepad.exe» и я хочу ввести значение «блокнот» в переменную. Поэтому я делаю следующее:

 $CLREXE = Get-Content -Path "T:keeranTest-killtest.ini" | Select-String -Pattern 'CLREXE'
#split the value from "CLREXE ="
$CLREXE = $CLREXE -split "="
#everything fine untill here
$CLREXE = $CLREXE[1]
#i am trying to omit ".exe" here. But it doesn't work
$d = $CLREXE -split "." | Select-String -NotMatch 'exe'
 

Как я могу это сделать ?

Комментарии:

1. -split является оператором регулярного выражения, вам нужно сбежать . : $CLREXE -split '.'

Ответ №1:

@Mathias R. Jessen уже ответил на ваш вопрос.

Но вместо разделения по имени файла вы можете использовать GetFileNameWithoutExtension метод из класса .NET Path.

$CLREXE = "notepad.exe"
$fileNameWithoutExtension = [System.IO.Путь]::GetFileNameWithoutExtension($CLREXE) 
Запись-Хост $Имя файла без расширения # при этом будет выведен только "блокнот"

Комментарии:

1. На мой взгляд, это более стабильное и универсальное решение, поскольку имя файла на самом деле может содержать более одного». » в имени…

Ответ №2:

-split является оператором регулярного выражения и . является специальным метасимволом в регулярном выражении, поэтому вам нужно избежать его:

 $CLREXE -split '.'
 

Лучшим способом было бы использовать -replace оператора для удаления последнего . и всего, что после него:

 $CLREXE -replace '.[^.] 

Шаблон регулярного выражения соответствует одной буквальной точке ( .  ), затем 1 или более не-точкам ( [^.]   ), за которыми следует конец строки  $  .



Если вам не нравятся регулярные выражения, вы также можете использовать .Собственные строковые методы NET для этого:
 $CLREXE.Remove($CLREXE.LastIndexOf('.'))
 

Здесь мы используем String.LastIndexOf , чтобы найти индекс (позицию в строке) последнего вхождения . , а затем удалить что-либо оттуда

Комментарии:

1. Спасибо 1! Это действительно ответ на операцию!

Шаблон регулярного выражения соответствует одной буквальной точке ( . ), затем 1 или более не-точкам ( [^.] ), за которыми следует конец строки $ .


Если вам не нравятся регулярные выражения, вы также можете использовать .Собственные строковые методы NET для этого:


Здесь мы используем String.LastIndexOf , чтобы найти индекс (позицию в строке) последнего вхождения . , а затем удалить что-либо оттуда

Комментарии:

1. Спасибо 1! Это действительно ответ на операцию!