问题描述
D:\CompanyData\REPORTS\ENQUIRIES\Old House Farm\Images
D:\CompanyData\REPORTS\ENQUIRIES\Quay House\Text
D:\CompanyData\REPORTS\ENQUIRIES\Church Road\Photography
D:\CompanyData\REPORTS\ENQUIRIES\Church Road\Reports\
D:\CompanyData\REPORTS\ENQUIRIES\Church Road\Reports\Images
我想在第5个“ /”字符上拆分它们以返回以下内容(包括最后一个尾随的“ /”
D:\CompanyData\REPORTS\ENQUIRIES\Old House Farm\
D:\CompanyData\REPORTS\ENQUIRIES\Quay House\
D:\CompanyData\REPORTS\ENQUIRIES\Church Road\
D:\CompanyData\REPORTS\ENQUIRIES\Church Road\
D:\CompanyData\REPORTS\ENQUIRIES\Church Road\
到目前为止,我已经尝试了以下方法:
$source = $Item.source.Split("\")[0]
以及上述各种其他组合,但无法完全满足我的要求。谁能帮忙?
解决方法
尝试这样:
[string](Split-Path "PATH")+"\"
如果您有$Item.Source
,则:
[string](Split-Path "$($Item.Source)")+"\"
,
您可以在反斜杠上拆分每个文件路径,以获取零件数组。然后以反斜杠加入最多5个部分,并附加另一个反斜杠tyo:
$parts = "D:\CompanyData\REPORTS\ENQUIRIES\Old House Farm\Images" -split '\\'
'{0}\' -f ($parts[0..[math]::Min($parts.Count,4)] -join '\')
或使用正则表达式执行此操作:
"D:\CompanyData\REPORTS\ENQUIRIES\Old House Farm\Images" -replace '^(([^\\]+\\){1,5}).*','$1'
正则表达式详细信息:
^ Assert position at the beginning of the string
( Match the regular expression below and capture its match into backreference number 1
( Match the regular expression below and capture its match into backreference number 2
[^\\] Match any character that is NOT a “A \ character”
+ Between one and unlimited times,as many times as possible,giving back as needed (greedy)
\\ Match the character “\” literally
){1,5} Between one and 5 times,giving back as needed (greedy)
)
. Match any single character that is not a line break character
* Between zero and unlimited times,giving back as needed (greedy)
结果:
D:\CompanyData\REPORTS\ENQUIRIES\Old House Farm\
,
简单的正则表达式版本:
$Item.Source -replace "(('[^\\]+\\){1,5}).*",'$1'
[^\\]+\\
匹配1-n个非\
后跟\
{1,5}
重复图案5次
这是使用Select-String
(请注意,该模式使用regex
,因此您需要使用另一个反斜杠\
来转义反斜杠\
)
$source = ($($Item.Source) | Select-String -Pattern '.+\\.+\\.+\\.+\\.+\\' -AllMatches).Matches.Value
输出:
D:\CompanyData\REPORTS\ENQUIRIES\Old House Farm\
D:\CompanyData\REPORTS\ENQUIRIES\Quay House\
D:\CompanyData\REPORTS\ENQUIRIES\Church Road\
D:\CompanyData\REPORTS\ENQUIRIES\Church Road\Reports\
D:\CompanyData\REPORTS\ENQUIRIES\Church Road\Reports\