Powershell从字符串到最后一个分隔符中删除字符

时间:2017-03-17 12:48:51

标签: string powershell

我有一个字符串

项目\ TestEnvironment \ 11111xx \ 1111111

需要从中获取1111111。我现在正在做的是:

$name = $dir.Substring($dir.IndexOf('\')+1)

其中$ dir是我的字符串,但它只删除第一个字符串,是否可以改变方向?

3 个答案:

答案 0 :(得分:6)

如何使用split-path

$string = 'Projects\TestEnvironment\11111xx\1111111'
Split-Path $string -Leaf

返回1111111

注意-Leaf参数表示此cmdlet仅返回路径中的最后一个项目或容器。

答案 1 :(得分:3)

@ Robin的答案很好,如果字符串总是一个路径(用“\”分隔);在一般情况下,分隔符可能是不同的字符,您可以使用

$string = "This-is-a-string-with-delimiters"
$lastword = ($string -split "-")[-1]

-split运算符默认分割空格,但会在您选择传递的任何字符上拆分,返回一个字符串数组,每个字符串是分隔符之前/之间/之后的材料 - 在示例中上面,每个单词都在数组中的单独字符串中。数组的负数下标来自数组的 end 而非开始,并且是1-origin而不是0-origin - 所以$x[-1] last 数组$x的元素。

这种技术也适用于路径;

$path = "C:\Users\JSmith\Documents\Resume.doc"
$filename = ($path -split "\\")[-1]

会给你$filename -eq Resume.doc。请注意,在这种情况下传递给-split的分隔符是转义的,因为分隔符可以是正则表达式,反斜杠(“\”)在正则表达式中是有意义的(它是指示另一个有意义的字符是的字符被“逃脱”,或其意思被忽略了。)

答案 2 :(得分:0)

其他解决方案

('Projects\TestEnvironment\11111xx\1111111' -split '\\')[-1]

'Projects\TestEnvironment\11111xx\1111111'.Split('\')[-1]