【问题标题】:How to simply extract leading N parts of a path?如何简单地提取路径的前 N ​​部分?
【发布时间】:2015-06-17 15:13:59
【问题描述】:

我有一堆目录名和文件名,有些是绝对路径,有些是相对路径。我只是希望获得每条路径的 2 个主要部分。输入:

D:\a\b\c\d.txt\
c:\a
\my\desk\n.txt
you\their\mine

我希望得到:

D:\a
c:\a
\my\desk
you\their

PowerShell 中是否有方便的方法来实现这一点?

【问题讨论】:

  • 我不使用电源外壳,但我用谷歌搜索了它technet.microsoft.com/en-us/library/…
  • Split-Path -Parent ,如果需要嵌套....
  • 其他人建议的拆分路径。 get-childitem 上还有一个 -Depth 开关,在 PowerShell 5.0 中可能会派上用场(使用 -recurse),您可以使用它进行一些过滤以获得强大的结果。
  • 你看过[这个问题](stackoverflow.com/q/9725521/847990)吗?

标签: powershell path split


【解决方案1】:

有时您可能会因为建议字符串操作而受到打击,因为它有时可能“不可靠”。但是,您的测试数据包含 3 种不同的可能性。此外,从未见过有人从路径中寻找第一部分s

我提出了一个简单的解决方案,可以根据您的问题解决您想要的输出

"D:\a\b\c\d.txt\","c:\a","\my\desk\n.txt","you\their\mine" | ForEach-Object{
    ($_ -split "(?<=\S)\\")[0..1] -join "\"
} 

我需要使用lookbehind,因为您的示例输出包含一个您想要保留的前导斜杠。它将每个字符串拆分为前面有非空白字符的斜杠。

这不会返回正确的 UNC 路径。如果您只想要路径的一部分,Split-Path 将是显而易见的选择。我想你可以嵌套调用 get 2 但此时我无法找到一种简单的方法来解释你所有具有相同逻辑的示例。

【讨论】:

  • 谢谢,但您能帮忙解释一下“(?
  • @Matt +1 用于正则表达式,总有一天我将不得不考虑这些......此外,这不适用于 UNC 路径“\\bob\c$\temp”,会容易修复吗?
  • @viksantata ?&lt;= 是所谓的积极的后视断言。在您的情况下,它将匹配限制为以非空格字符开头的反斜杠。没有那个\my\desk\n.txt 会变成\my 而不是\my\desk
猜你喜欢
  • 2017-05-04
  • 2010-09-29
  • 2021-10-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 2015-09-19
相关资源
最近更新 更多