Я использую PowerShell 2.0 и хочу передать все подкаталоги определенного пути. Следующая команда выводит все файлы и каталоги, но я не могу понять, как отфильтровать файлы.
Get-ChildItem c:\mypath -Recurse
Я пытался использовать $_.Attributes
для получения атрибутов, но тогда я не знаю, как создать буквальный экземпляр, System.IO.FileAttributes
чтобы сравнить его с. В cmd.exe
нем было бы
dir /b /ad /s
powershell
powershell-2.0
Питер Халл
источник
источник
В PowerShell 3.0 это проще:
источник
dir
был псевдонимGet-ChildItem
, и параметры-Directory
и-File
работали, как описано. Я использовал командыecho $PSVersionTable
,help dir
,dir -Directory
иdir -File
придумать с этим комментарием.ls
иdir
есть псевдонимы, чтобыGet-ChildItem
выбрать ядиспользование
Если вы предпочитаете псевдонимы, используйте
или
Для просмотра подкаталогов также добавьте
-r
опцию.Протестировано на PowerShell 4.0, PowerShell 5.0 (Windows 10), PowerShell Core 6.0 (Windows 10, Mac и Linux) и PowerShell 7.0 (Windows 10, Mac и Linux).
Примечание . В PowerShell Core символические ссылки не используются при указании параметра
-r
. Чтобы-FollowSymlink
перейти по символическим ссылкам, укажите переключатель с помощью-r
.Заметка 2 : PowerShell теперь кроссплатформенный, начиная с версии 6.0. Кроссплатформенная версия изначально называлась PowerShell Core, но слово «Core» было исключено с PowerShell 7.0+.
Документация Get-ChildItem: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem
источник
Более чистый подход:
Интересно, есть ли в PowerShell 3.0 переключатель, который возвращает только каталоги; это кажется логичным, чтобы добавить.
источник
-Directory
и-File
флагиИспользование:
источник
В PowerShell v2 и новее (k обозначает папку, в которой вы начинаете поиск):
Если вам нужны только имена папок и ничего больше, используйте это:
Если вы ищете конкретную папку, вы можете использовать следующее. В этом случае я ищу папку с именем
myFolder
:источник
При таком подходе требуется меньше текста:
источник
Использование:
Это даст вам вывод корневой структуры с именем папки только для каталогов.
источник
Использование:
Что делает следующее
Get-ChildItem \\myserver\myshare\myshare\ -Directory
Select-Object -Property name
convertto-csv -NoTypeInformation
Out-File c:\temp\mydirectorylist.csv
источник
Немного более читаемый и простой подход может быть достигнут с помощью сценария ниже:
Надеюсь это поможет!
источник
Вы захотите использовать Get-ChildItem, чтобы сначала получить все папки и файлы рекурсивно. А затем направьте этот вывод в предложение Where-Object , которое принимает только файлы.
источник
В принятом ответе упоминается
чтобы получить «сырую строку». Но на самом деле объекты типа
Selected.System.IO.DirectoryInfo
будут возвращены. Для необработанных строк можно использовать следующее:Разница имеет значение, если значение объединяется в строку:
Select-Object
удивительноfoo\@{FullName=bar}
ForEach
оператором ожидается:foo\bar
источник
Select-Object -ExpandProperty FullName
Мое решение основано на статье TechNet Забавные вещи, которые вы можете сделать с помощью командлета Get-ChildItem .
Я использовал его в своем сценарии, и он работает хорошо.
источник
Используйте это:
источник
Чтобы ответить на оригинальный вопрос конкретно (используя IO.FileAttributes):
Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -and [IO.FileAttributes]::Directory}
Я предпочитаю решение Марека, хотя (
Where-Object { $_ -is [System.IO.DirectoryInfo] }
).источник