从变量字符串长度中删除(减去)最后n个字符

时间:2018-06-15 07:32:05

标签: string powershell split

我需要在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 *函数绕过字符串,但没有做到这一点。

3 个答案:

答案 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$",''