我有一个字符串
项目\ TestEnvironment \ 11111xx \ 1111111
需要从中获取1111111。我现在正在做的是:
$name = $dir.Substring($dir.IndexOf('\')+1)
其中$ dir是我的字符串,但它只删除第一个字符串,是否可以改变方向?
答案 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]