我的脚本位于C:\projects\bacon\packages\build\run.ps1
,我正在尝试找到解决方案文件夹(在本例中为bacon)。如果您知道文件夹名称,我发现的所有内容都会显示如何向前攀爬。但我不知道项目名称,所以我需要向后爬,直到找到第一个包含给定脚本路径中包含或依赖文件夹的文件夹。
我发现的最接近的功能是使用Split-Path $script:MyInvocation.MyCommand.Path
来获取我的脚本路径,并且可能以某种方式向后循环?但我无法找到向后循环文件夹,直到我找到"包"或"依赖"夹。
答案 0 :(得分:0)
您可以使用Get-Item
和Get-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
。