Powershell-如何查找指定类型的所有文件及其旁边的文件夹

问题描述 投票:0回答:1

我是PowerShell的新手。我花了将近两天的时间尝试寻找一些文件夹。无论我做什么都行不通。我在文件系统中具有以下结构。

My-GitRepo
|-Src
  |-MyCSharpProject_A
    |-bin
    |-MyCSharpProject_A.csproj
  |-MyCSharpProject_B
    |-bin
    |-MyCSharpProject_B.csproj
  |-MyCSharpProject_C
    |-bin
    |-MyCSharpProject_C.csproj
|-Tools
  |-MyPowerShellScript.ps1

我目前正在处理此“ MyPowerShellScript.ps1”文件。我想做的是从“ Src”文件夹中获取* .csproj文件,它可以工作Get-ChildItem -Path "..\Src\*\*.csproj"。但是目标有点复杂。我试图使用管道来

  1. 获取* .csproj文件
  2. 获取包含它们的文件夹
  3. 使用“ bin”子文件夹名称合并文件夹路径
  4. 测试“ bin”文件夹是否存在
  5. 并将“ bin”文件夹路径放入本地数组变量。

因此,我需要动态创建一个当前在脚本中已进行硬编码的数组。

$folders = (
    "..\Src\MyCSharpProject_A\bin",
    "..\Src\MyCSharpProject_B\bin",
    "..\Src\MyCSharpProject_C\bin",
);

BTW:Get-ChildItem -Path "..\Src\*\bin"不是我想要的。我正在尝试找到csproj文件旁边的“ bin”文件夹。

请帮助!

powershell pipeline get-childitem
1个回答
0
投票

好吧,如果我对您的问题正确,那么可以采取以下措施。

$BasePath = 'PathToSearch'
# Set-Location - This is so we get relative paths
Set-location $BasePath

$CsProjects = Get-ChildItem -Path $BasePath -Filter '*.csproj' -File -recurse

$OutPaths = Foreach ($CSP in $CsProjects) {
    $Binpath = "$(Split-Path $CSP.FullName)\bin"
    if (Test-Path $Binpath) {
        Resolve-Path  $Binpath -Relative
    }
}
  1. 获取* .csproj文件-使用带有Get-ChildItem参数的-Filter完成。
  2. 获取包含它们的文件夹-这可以通过Split-Path完成
  3. 使用“ bin”子文件夹名称合并文件夹路径-简单字符串串联
  4. 测试“ bin”文件夹是否存在-Test-Path
  5. 并将“ bin”文件夹路径放入本地数组变量中。 -由于您的示例显示了相对路径,因此我将Set-LocationResolve-Path一起使用,并带有-Relative开关参数
© www.soinside.com 2019 - 2024. All rights reserved.