2015-06-01 3 views

ответ

0

В PowerShell, то Get-ChildItem Командлет работает как ls (по крайней мере с поставщиком файловой системы). Все возвращенные детали имеют свойство PowerShell конкретного названия PSIsContainer, указывающее, является ли он каталогом или нет:

foreach($item in (Get-ChildItem)){ 
    if($item.PSIsContainer){ 
     "Directory" 
    } else { 
     "File" 
    } 
} 

Если вы хотите увидеть, что внутри каждый каталога, один уровень вниз:

foreach($item in (Get-ChildItem)){ 
    if($item.PSIsContainer){ 
     # Directory! Let's see what's inside: 
     Get-ChildItem -Path $item.FullName 
    } 
} 

Начиная с версии PowerShell версии 3.0 и выше, Get-ChildItem поддерживает переключатель File и Directory поставщика файловой системы, поэтому, если вы ТОЛЬКО хотите каталоги, вы можете сделать:

Get-ChildItem -Directory 

Так второй пример становится:

Get-ChildItem -Directory | Get-ChildItem 

Вы также можете просмотреть список файлов рекурсивно (как ls -R):

Get-ChildItem -Recurse 
+0

Спасибо человек !!. И если я хотел бы напечатать то, что связывает каталог $ item? Я должен сделать еще один foreach? – user3671361

+0

@ user3671361 Обновленный ответ –

1

Более Posh способ заключается в использовании трубопровода, и, возможно, хеш-таблицы:

$type = @{ 
    $true = 'Directory' 
    $false = 'File' 
} 

Get-ChildItem | ForEach-Object { $type[$_.PSIsContainer] } 

PowerShell даже имеет значение по умолчанию aliasls для Get-ChildItem, так что вы могли бы использовать более UNIX- МОГ синтаксис:

ls | % { $type[$_.PSIsContainer] } 
Смежные вопросы