子路径不带“。”

时间:2018-10-16 03:08:19

标签: powershell-core

对于当前位置下的所有目录,我试图找到一种方法来产生合格的子路径名称,而前导“ ./”除外。

$dirs = Get-ChildItem -Directory -Recurse .

我会使用Resolve-Path -Relative,但下一个需要使用的结果是不带./的字符串。

无需诉诸于字符串操作技巧(我可以-分割每条路径,将第一个元素切开,然后再次将其结合在一起,但是join!)

注意:我正在使用此跨平台,因此任何解决方案都需要在核心环境下工作。

----编辑:示例----

Linux:

> cd /proc/sys
> Function GetIPV6 { gci -r -dir |? name -eq 'ipv6' }
> GetIPV6 | Resolve-Path -Relative
./net/ipv6    # << has a leading './' I want to avoid
> (GetIPV6).FullName
/proc/sys/net/ipv6   # << full path, not sub path

我正在寻找的是:

> cd /proc/sys
> GetIPV6 | ???
net/ipv6

Windows:

> cd /windows/system32
> Function GetETC { gci -r -dir |? name -eq "etc" }
> GetETC | resolve-path -relative
.\Drivers\etc  #< has leading .\
> (GetETC).FullName
C:\Windows\System32\Drivers\etc  #< full path

我想要的是

> GetETC | ???
Drivers\etc   or Drivers/etc

1 个答案:

答案 0 :(得分:0)

如果我将限定路径理解为完全限定路径,则FullName对象上有一个System.IO.DirectoryInfo属性,该属性是从{返回的{1}}:

Get-ChildItem -Directory

这将为您提供工作目录下目录的所有标准路径的字符串数组。


要解决您的修改,此示例将在* nix或Windows上运行:

Get-ChildItem -Directory -Recurse |
    Select-Object -ExpandProperty FullName

最后一种更强大的方式:

(Get-ChildItem -Directory -Recurse).
    FullName.
    Replace("$pwd", '') -replace '^[\\/]'