Я пытаюсь разбить имя файла без расширения и назначить его новой переменной. Но функция .split ('') добавляет новый пробел или табуляцию. Есть предложения, как это исправить?
$dmpfile = "test.dmp"
$filename = $dmpfile.split('.dmp')
echo $filename
test
ls $filename*.log
no output.............
echo $filename*.log
test *.log
Прежде всего, Трещина функция создает объект со всеми строками, которые появляются между разделенным символом. Вы должны получить доступ к одному элементу собственности, используя $variable[x]
, где x - это позиция нужного вам элемента. В вашем случае вам придется позвонить $filename[0]
. (Первый элемент не 1, он начинается с 0)
Во-вторых, я не могу объяснить почему, но если вы используете метод split, как вы, то каждый отдельный символ будет обрабатываться как возможный разделитель. Вот почему 'pmdasdfgpmd.dmp'.split(".dmp")
вернется asdfg - так же, как если бы вы использовали отделка. Но если вы используете такую функцию:
'pmdasdfgpmd.dmp' -split".dmp"
он вернет имя файла без расширения: pmdasdfgpmd
В-третьих, если вы хотите удалить часть строки, вы также можете использовать заменить метод и замените строку ничем:
либо
'test.dmp'.replace(".dmp","")
или
'test.dmp' -replace ".dmp"
Но это всего лишь базовая замена строк в PowerShell - самый простой способ получить имя файла без расширения - это любой способ, предложенный @PetSerAl:
[System.IO.Path]::GetFileNameWithoutExtension($dmpfile)
или вы звоните Get-Item
PSFunction и используйте BaseName
-Свойство:
(Get-Item $dmpfile).BaseName
В обоих случаях переменная $ dmpfile должна содержать полный путь к файлу, а не только имя файла.
Вы должны использовать Trim () вместо Split (). $filename = $dmpfile.Trim(".dmp")