我有以下命令:
> "D:\abc\abcName".TrimStart("D:\abc")
Name
实际上我希望这能完全修剪“D:\ abc”并仅返回“abcName”,但似乎第二个“abc”也被修剪掉了。
为什么会发生这种情况,我该如何解决?
我正在使用PS 4.0。
答案 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