将两次调用的结果组合到Select-Object

时间:2017-11-06 11:23:13

标签: powershell

作为PowerShell脚本的一部分,我想生成两个不同文件夹的子文件夹列表。我通过调用Get-ChildItem两次,使用Select-Object转换路径并尝试合并结果来解决此问题。然而,这是我陷入困境的结合步骤。我试过这个:

$cur = Get-Location
$mainDirs = Get-ChildItem -Directory -Name | Select-Object {"$cur\$_"}
$appDirs = Get-ChildItem -Directory -Name Applications\Programs |
           Select-Object {"$cur\Applications\Programs\$_"}
$dirs = $mainDirs,$appDirs      #Doesn't work!

$dirs最终由$mainDirs中的条目组成,后面跟$appDirs中的多个项目一样多。

如何在PowerShell中组合这些?

修改mainDirs[0]的输出:

"$cur\$_"                
---------                
D:\somefolder\somesubfolder

appDirs[0]的输出:

"$cur\Applications\Programs\$_"                        
-------------------------------                        
D:\somefolder\Applications\Programs\othersubfolder

1 个答案:

答案 0 :(得分:3)

Get-ChildItem接受字符串数组作为输入。只需将要列出的子文件夹的两个文件夹作为数组传递。展开FullName属性以获取子文件夹的路径:

$folders = '.', '.\Applications\Programs'
$dirs    = Get-ChildItem $folders -Directory | Select-Object -Expand FullName

如果你想要相对而不是绝对路径从路径字符串的开头删除当前目录:

$pattern = '^{0}\\' -f [regex]::Escape($PWD.Path)
$folders = '.', '.\Applications\Programs'
$dirs    = Get-ChildItem $folders -Directory |
           ForEach-Object { $_.FullName -replace $pattern }