我正在制作一个简单的编译工具作为练习PS的一种方式,我需要将字符串的一部分提取到另一个变量中。例如:
[string]$Filepath = "C:/Users/xxx/Projects/file.cpp"
(我需要字符串的最后一部分)
由于我是 PS 的初学者,有没有一种方法可以在不使用正则表达式的情况下做到这一点?
我尝试了
-match
的东西,但我不是在寻找任何特定的值,我只需要最后一个“/”之后的所有内容。
回答您帖子的标题中包含的问题:
PowerShell 中 str.Substring 的等价物是什么?
PowerShell 提供对所有 .NET API 的几乎无限制的访问,因此您可以直接调用
System.String
类型的 .Substring()
;例如:
# -> 'file.cpp'
"C:/Users/xxx/Projects/file.cpp".Substring(22)
我只需要最后一个“/”之后的所有内容。
.Split()
方法按给定的逐字字符拆分字符串,并将其与 PowerShell 的增强索引相结合,以允许您使用 从末尾引用元素。负索引,特别是 [-1]
引用数组的last 元素(以及实现
System.Collections.IList
接口的其他 .NET 类型)。
# -> 'file.cpp'
"C:/Users/xxx/Projects/file.cpp".Split('/')[-1]
/
没有区别):
# -> 'file.cpp'
("C:/Users/xxx/Projects/file.cpp" -split '/')[-1]
请参阅这个答案,了解为什么考虑到所涉及的权衡,使用 -split
而不是
.Split()
通常更可取。
/
字符之前的所有内容,并且 - 由于未指定替换操作数 - 有效地 删除 匹配的内容,只留下 after 最后一个
/
后面的内容:
# -> 'file.cpp'
"C:/Users/xxx/Projects/file.cpp" -replace '^.*/'
只有使用分隔符 /
和
\\
时,才可以使用 Split-Path
的 -Leaf
参数,利用 PowerShell 可以识别
\
和
/
可互换的事实作为路径(目录)分隔符:
# -> 'file.cpp'
Split-Path -Leaf "C:/Users/xxx/Projects/file.cpp"