Как получить только каталоги, использующие Get-ChildItem? - PullRequest
215 голосов
/ 21 июня 2010

Я использую PowerShell 2.0, и я хочу передать все подкаталоги определенного пути.Следующая команда выводит все файлы и каталоги, но я не могу понять, как отфильтровать файлы.

Get-ChildItem c:\mypath -Recurse

Я пытался использовать $_.Attributes, чтобы получить атрибуты, но тогда я не могузнать, как создать буквальный экземпляр System.IO.FileAttributes, чтобы сравнить его с.В cmd.exe это будет

dir /b /ad /s

Ответы [ 15 ]

2 голосов
/ 28 августа 2013

Немного более читабельного и простого подхода можно добиться с помощью приведенного ниже сценария:

$Directory = "./"
Get-ChildItem $Directory -Recurse | % {
    if ($_.Attributes -eq "Directory") {
        Write-Host $_.FullName
    }
}

Надеюсь, это поможет!

1 голос
/ 03 февраля 2015

Мое решение основано на статье TechNet Забавные вещи, которые вы можете сделать с помощью командлета Get-ChildItem .

Get-ChildItem C:\foo | Where-Object {$_.mode -match "d"}

Я использовал его в своем сценариии это хорошо работает.

1 голос
/ 13 августа 2014

В принятом ответе упоминается

Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName

, чтобы получить «необработанную строку».Но на самом деле объекты типа Selected.System.IO.DirectoryInfo будут возвращены.Для необработанных строк может использоваться следующее:

Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | % { $_.FullName }

Разница имеет значение, если значение объединяется в строку:

  • с Select-Object удивительно foo\@{FullName=bar}
  • с ForEach -оператором ожидаемый: foo\bar
0 голосов
/ 04 октября 2017

Чтобы конкретно ответить на оригинальный вопрос (используя IO.FileAttributes):

Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -and [IO.FileAttributes]::Directory}

Я предпочитаю решение Марека, хотя (Where-Object { $_ -is [System.IO.DirectoryInfo] }).

0 голосов
/ 14 августа 2013

Используйте это:

Get-ChildItem -Path \\server\share\folder\ -Recurse -Force | where {$_.Attributes -like '*Directory*'} | Export-Csv -Path C:\Temp\Export.csv -Encoding "Unicode" -Delimiter ";"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...