我正在尝试拆分不带扩展名的文件名并将其分配给新变量。但是 .split('') 函数添加了新的空格或制表符。有什么建议可以解决这个问题吗?
$dmpfile = "test.dmp"
$filename = $dmpfile.split('.dmp')
echo $filename
test
ls $filename*.log
no output.............
echo $filename*.log
test *.log
答案1
首先,分裂函数创建一个包含出现在分割字符之间的所有字符串的对象。您必须使用 来访问属性的单个项目$variable[x]
,其中 x 是您想要的项目的位置。在您的例子中,您必须调用$filename[0]
。(第一个项目不是 1,它从 0 开始)
其次,我无法真正解释原因,但如果你像以前一样使用字符串方法 split,则每个字符都将被处理为可能的分隔符。这就是为什么'pmdasdfgpmd.dmp'.split(".dmp")
将返回韓國- 就像你使用修剪。但是如果你像这样使用该函数:
'pmdasdfgpmd.dmp' -split".dmp"
它将返回不带扩展名的文件名:韓國
第三,如果要删除字符串的一部分,也可以使用代替方法并将字符串替换为空:
任何一个
'test.dmp'.replace(".dmp","")
或者
'test.dmp' -replace ".dmp"
但这只是 powershell 中的一些基本字符串替换 - 获取没有扩展名的文件名的最简单方法是@PetSerAl 提出的方法:
[System.IO.Path]::GetFileNameWithoutExtension($dmpfile)
或者调用Get-Item
PSFunction 并使用BaseName
-Property:
(Get-Item $dmpfile).BaseName
在这两种情况下,变量 $dmpfile 都必须保存文件的完整路径,而不仅仅是文件名。
答案2
您应该使用 Trim() 而不是 Split()。$filename = $dmpfile.Trim(".dmp")