String.TrimStart()没有按照我的预期运行,为什么?

时间:2015-06-25 09:39:26

标签: string powershell trim

我有以下命令:

> "D:\abc\abcName".TrimStart("D:\abc")
Name

实际上我希望这能完全修剪“D:\ abc”并仅返回“abcName”,但似乎第二个“abc”也被修剪掉了。

为什么会发生这种情况,我该如何解决?

我正在使用PS 4.0。

2 个答案:

答案 0 :(得分:2)

TrimStart()的参数被视为char的数组,而不是文字字符串。字符串开头的所有连续字符与参数中的任何字符匹配" D:\ abc"被删除了。

您可以使用-replace运算符,它将正则表达式模式作为其右手参数:

PS C:\> "D:\abc\abcName" -replace "^D:\\abc\\"
abcName

如果您不确定要转义哪些字符(例如\),请让[regex]课程为您执行此操作:

PS C:\> "D:\abc\abcName" -replace "^$([regex]::Escape("D:\abc\"))"
abcName

答案 1 :(得分:2)

Mathias R. Jessen指出了这一点。

看起来你想从路径中获取文件名。而不是使用TrimStart考虑使用静态GetFileNameWithoutExtension方法:

[system.io.path]::GetFileNameWithoutExtension("D:\abc\abcName.bat")

结果:

  

abcName

或者如果您想要带扩展名的完整文件名:

[system.io.path]::GetFileName("D:\abc\abcName.bat")

结果:

  

abcName.bat