#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! Это действительно ответ на операцию!