Как распечатать файл для определенного родителя / ребенка с помощью Get-ChildItem?
Я могу рекурсивно искать в каталоге с помощью Get-ChildItem -Recurse. Но не получается ожидаемый результат. Пробовал -Глубина тоже. Но не повезло.
Структура папки приведена ниже:
C: \ Users \ Documents \Azure\ репо \Templates\ каталог *
directory1-uat -> childdir1 -> childdir2 -> a.parameters.json
каталог2-dev -> childdir1 -> childdir2 -> b.parameters.json
directory3-nonprod -> childdir1 -> childdir2 -> c.parameters.json
directory4-test -> childdir1 -> childdir2 -> d.parameters.json
directory5-uat -> childdir1 -> childdir2 -> e.parameters.json
Я пробовал следующее:
$repo = 'C:\Users\Documents\Azure'
$subDirs = Get-ChildItem -Path "$repo\Templates\*\" -Depth 0 -Directory | Where-Object fullname -notlike "*_Templates*"
$subDirs
ForEach ($subDir in $subDirs) {
$subDir
$envTag = $subDir.Name.split('-')[1]
$envTag
$subParamFiles = Get-ChildItem -Path $subDir.PSParentPath -Recurse -File -Include "*parameters.json"
$subParamFiles
}
Выход:
d----- 02-Jan-20 8:48 PM directory1-uat
uat
-a---- 02-Jan-20 8:48 PM a.parameters.json
-a---- 02-Jan-20 8:48 PM b.parameters.json
-a---- 02-Jan-20 8:48 PM c.parameters.json
-a---- 02-Jan-20 8:48 PM d.parameters.json
-a---- 02-Jan-20 8:48 PM e.parameters.json
d----- 02-Jan-20 8:48 PM directory2-dev
dev
-a---- 02-Jan-20 8:48 PM a.parameters.json
-a---- 02-Jan-20 8:48 PM b.parameters.json
-a---- 02-Jan-20 8:48 PM c.parameters.json
-a---- 02-Jan-20 8:48 PM d.parameters.json
-a---- 02-Jan-20 8:48 PM e.parameters.json
d----- 02-Jan-20 8:48 PM directory3-nonprod
nonprod
-a---- 02-Jan-20 8:48 PM a.parameters.json
-a---- 02-Jan-20 8:48 PM b.parameters.json
-a---- 02-Jan-20 8:48 PM c.parameters.json
-a---- 02-Jan-20 8:48 PM d.parameters.json
-a---- 02-Jan-20 8:48 PM e.parameters.json
d----- 02-Jan-20 8:48 PM directory4-test
test
-a---- 02-Jan-20 8:48 PM a.parameters.json
-a---- 02-Jan-20 8:48 PM b.parameters.json
-a---- 02-Jan-20 8:48 PM c.parameters.json
-a---- 02-Jan-20 8:48 PM d.parameters.json
-a---- 02-Jan-20 8:48 PM e.parameters.json
d----- 02-Jan-20 8:48 PM directory5-uat
uat
-a---- 02-Jan-20 8:48 PM a.parameters.json
-a---- 02-Jan-20 8:48 PM b.parameters.json
-a---- 02-Jan-20 8:48 PM c.parameters.json
-a---- 02-Jan-20 8:48 PM d.parameters.json
-a---- 02-Jan-20 8:48 PM e.parameters.json
Ожидаемый результат:
d----- 02-Jan-20 8:48 PM directory1-uat
uat
-a---- 02-Jan-20 8:48 PM a.parameters.json
d----- 02-Jan-20 8:48 PM directory2-dev
dev
-a---- 02-Jan-20 8:48 PM b.parameters.json
d----- 02-Jan-20 8:48 PM directory3-nonprod
nonprod
-a---- 02-Jan-20 8:48 PM c.parameters.json
d----- 02-Jan-20 8:48 PM directory4-test
test
-a---- 02-Jan-20 8:48 PM d.parameters.json
d----- 02-Jan-20 8:48 PM directory5-uat
uat
-a---- 02-Jan-20 8:48 PM e.parameters.json
2 ответа
Вы печатаете $subDir
- в 1-м случае это directory1-uat
. то вы получаете список файлов родительского каталога$subDir
. вы хотите файлы в$subDir
, а не во всем родительском дереве. [ухмылка]
попробуйте заменить $subDir.PSParentPath
с просто $subDir
. эта строка...
$subParamFiles = Get-ChildItem -Path $subDir.PSParentPath -Recurse -File -Include "*parameters.json"
... станет этим...
$subParamFiles = Get-ChildItem -Path $subDir -Recurse -File -Include "*parameters.json"
Вы должны указать текущий путь вместо родительского пути:
$subDirs = dir "C:\Users\Documents\Azure\Templates\*\" -Directory | ? {$_.fullname -notlike "*_Templates*"}
$subDirs
$subDirs | % {
$_
$_.Name.split('-')[1]
dir $_ -Recurse -File -Filter "*parameters.json"
}