我需要在powershell代码中删除(或替换为空)字符串的最后n个字符。变体可能与减法字符串形成一个字符串(没有找到我的答案)。 我有这样的东西(字符串):
东西/东西/../ lastsomething / NAME
其中 NAME 是我可以预先提取并操作的变量文本($ name或$ name.length)。并且可以计算整个字符串 - $ string.length。 如何从字符串($ string)中减去此 NAME ?我搜索了很多方法,包括 trim,replace,substring - 但所有这些方法大多数都是使用静态单词或正则表达式,或者是字符串的开头。
我需要得到这个:
东西/东西/../ lastsomething
我甚至尝试过这样的结构:
$string.split('($NAME)')[0]
和
$string.split('[string]($NAME)')[0]
和其他带有 join 的get-AD *函数绕过字符串,但没有做到这一点。
答案 0 :(得分:3)
一个简单的解决方案是将子字符串从开头(0)带到/
的最后一次出现。
$t = 'something/something/../lastsomething/NAME'
$t.Substring(0, $t.LastIndexOf('/'))
答案 1 :(得分:2)
从您的评论中编辑真正的问题是如何获得
-replace '($_.Name)',' '
工作。单引号不会扩展变量 - 因此请使用双引号。
要强制评估$_.Name
,您必须使用$()
-replace "/$($_.Name)"
使用未知的最后一个元素/Name
> $String = 'something/something/../lastsomething/NAME'
> $String.Split('/')[-1]
NAME
> $string = $string -replace "/$($String.Split('/')[-1])"
> $string
something/something/../lastsomething
更简单的解决方案是:
> Split-Path $string
something\something\..\lastsomething
> Split-Path $string -Leaf
NAME
但它会将斜杠更改为反斜杠
答案 2 :(得分:1)
您可以将其替换为''
(没有...空字符串),因为-replace
适用于正则表达式,您可以确保只获得"匹配"在字符串的末尾,像这样:
$var = '/NAME'
'something/Name/something/../lastsomething/NAME' -replace "$var$",''