Powershell向后爬上目录树

时间:2014-06-04 15:23:06

标签: powershell

我的脚本位于C:\projects\bacon\packages\build\run.ps1,我正在尝试找到解决方案文件夹(在本例中为bacon)。如果您知道文件夹名称,我发现的所有内容都会显示如何向前攀爬。但我不知道项目名称,所以我需要向后爬,直到找到第一个包含给定脚本路径中包含或依赖文件夹的文件夹。

我发现的最接近的功能是使用Split-Path $script:MyInvocation.MyCommand.Path来获取我的脚本路径,并且可能以某种方式向后循环?但我无法找到向后循环文件夹,直到我找到"包"或"依赖"夹。

1 个答案:

答案 0 :(得分:0)

您可以使用Get-ItemGet-ChildItem的组合。 Get-Item返回具有Parent属性的对象。您可以将Get-ChildItem限制为仅限目录对象。然后你可以用它来向后跋涉:

$current = Get-Item .
Write-Host $Current.Parent
do
{
    $parent = Get-Item $current.Parent.FullName
    $childDirectories = $parent | Get-ChildItem -Directory | ? { $_.Name -in @("dependencies","packages") }
    $current = $parent
} until ($childDirectories)
$bacon = $parent.FullName

我应该说第一行$current = Get-Item .只有在PowerShell运行空间的当前路径位于您正在使用的树的末尾时才会起作用。

在您的脚本中,如果您使用的是v3,则可以将.替换为$PSScriptRoot