Powershell命令修剪路径(如果路径以“结束”)\&引用;
如果路径以Powershell命令修剪路径(如果路径以“结束”)\&引用;,powershell,filepath,text-parsing,ends-with,Powershell,Filepath,Text Parsing,Ends With,如果路径以\结尾,我需要修剪路径 C:\Ravi\ 我需要换成 C:\Ravi 我有一个例子,路径不会以\结尾(那么它必须跳过) 我尝试了使用.EndsWith(“\”),但在使用\而不是\时失败 这可以在PowerShell中不借助条件实现吗?无需过度复杂化 "C:\Ravi\".trim('\') 考虑改用TrimEnd(尤其是在使用UNC路径时): 您提到需要区分以“\”和“\”结尾的路径,并可能以不同的方式处理这些路径。虽然您可以使用.Trim(“\”或.TrimEnd(“\”删除
\
结尾,我需要修剪路径
C:\Ravi\
我需要换成
C:\Ravi
我有一个例子,路径不会以\
结尾(那么它必须跳过)
我尝试了使用.EndsWith(“\”
),但在使用\
而不是\
时失败
这可以在PowerShell中不借助条件实现吗?无需过度复杂化
"C:\Ravi\".trim('\')
考虑改用
TrimEnd
(尤其是在使用UNC
路径时):
您提到需要区分以“\”和“\”结尾的路径,并可能以不同的方式处理这些路径。虽然您可以使用
.Trim(“\”
或.TrimEnd(“\”
删除示例中的尾随“\”字符,但这两种方法都将从路径中删除所有尾随斜杠
如果路径以单个“\”结尾,则以下正则表达式将返回True,如果路径以多个“\”字符结尾,则返回false:
$Path -match '.+[^\\]\\$'
regex是指:
"C:\Ravi\" -match '.+[^\\]\\$'
True
"C:\Ravi\\" -match '.+[^\\]\\$'
False
希望这有帮助/有趣。:-) 注意:只有当您需要最多修剪2个尾随\
字符,想要支持/
路径分隔符,想要正确处理根路径,或者通常对正则表达式技术感兴趣时,此解决方案才有意义。如果可以修剪任何尾随
\
字符的非空运行,即也可以修剪3个或更多字符(在本例中很可能是这样),并且根路径不需要特殊处理,请使用。
一种基于PowerShell的解决方案,它具有一个可同时处理尾部\
和\
并可与/
一起使用的路径分隔符,因为PowerShell接受\
和/
作为路径分隔符(这也将使解决方案与跨平台版PowerShell Core一起工作):[1]
是一个字符类([\\/]
),它匹配单个字符,这些字符要么是[…]
(转义为\
,被视为文字)要么是\
//code>
匹配字符串末尾([\\/]?[\\/]
)的一个或两个$
实例,\
更松散地匹配一个或多个([\\/]+
)+
- 不指定替换字符串会有效地从字符串中删除匹配项;如果没有匹配项,则输入字符串保持原样
'C:\Ravi', 'C:\Ravi\', 'C:/Ravi/', 'C:\Ravi\\', '\\foo\bar\', 'C:\', '\' | % {
$_ -replace '[\\/]?[\\/]$'
}
上述收益率:
C:\Ravi
C:\Ravi
C:/Ravi
C:\Ravi
\\foo\bar
C:
但是,请注意,根路径的处理是有问题的:C:\
被转换为C:
,并且\
导致空字符串
在这些特殊情况下,通过留下一个尾随的\
,需要一个非常复杂的正则表达式(通过匹配任意数量的尾随路径分隔符稍微简化):
这将产生:
C:\Ravi
C:\Ravi
C:\
C:\
\
\
C:\Ravi\
C:\Ravi\
C:\
C:\
\
\
请注意根路径现在是如何以(一)\
结尾的
C:\Ravi\
根路径的特殊大小写很麻烦,这就是为什么有时最好确保而不是删除尾随\
或/
(例如,C:\Ravi
->C:\Ravi\
),以便通过简单的字符串连接方便地构建路径(无需担心字符数加倍。);正则表达式再次变得简单:
'C:\Ravi', 'C:\Ravi\', 'C:\', 'C:\\', '\', '\\' | % {
($_ -replace '[\\/]+$') + '\'
}
这将产生:
C:\Ravi
C:\Ravi
C:\
C:\
\
\
C:\Ravi\
C:\Ravi\
C:\
C:\
\
\
请注意,所有路径现在如何以(一)\
结尾
C:\Ravi\
[1] 有时,字符串操作是必要的,但通常您可以依靠来为自己构建路径,它可以优雅地处理目录部分中的尾随
\
(例如,连接路径C:\Ravi\file.txt
生成C:\Ravi\file.txt
)相反,后面的\
被保留:连接路径C:\Ravi\\file.txt
产生C:\Ravi\\file.txt
;然而,虽然这并不漂亮,但通常是良性的(这样的路径仍然可以访问文件系统).为什么需要修剪此路径?根据您的要求,可能有更好的处理方法(例如,如果您将字符串连接到路径中,Join path
将在不修剪的情况下为您处理).@alroc我不是在构建路径。我是在提取路径,然后根据需要进行定义。分割路径
可能会对您有用。这是可行的,但因为它从两端修剪,所以不适用于基于UNC的路径,例如\\foo\bar
“\\server\Ravi\”。trimend(“\”)将修复UNC路径。