Аналог PowerShell для «dir / a: d» (Win) или «ls -d * /» (Bash) - PullRequest
7 голосов
/ 26 августа 2009

Я просто хочу перечислить все каталоги в моем текущем рабочем каталоге, используя PowerShell. Это легко сделать из оболочки Bash:

ls -d */ 

или cmd.exe в Windows:

dir /a:d

Использование PowerShell, однако я не могу сделать это с помощью одной команды. Вместо этого я нашел только то, что работает:

ls | ? {$_Mode -like "d*"}

Это кажется слишком многословным и запутанным, и я подозреваю, что мне не нужен отдельный пункт Где. В справке по Get-ChildItem не ясно, как фильтровать режим. Может ли кто-нибудь просветить меня?

Ответы [ 6 ]

5 голосов
/ 26 августа 2009

Это тоже работает:

ls | ?{$_.PsIsContainer}

Нет сомнений, что это немного более многословно, чем bash или cmd.exe. Вы, конечно, можете добавить функцию и псевдоним в свой профиль, если хотите уменьшить детализацию. Я посмотрю, смогу ли я найти способ использовать -filter.

Что касается дальнейшего расследования, я не верю, что есть более краткий способ сделать это, если не создавать собственную функцию и псевдоним. Вы можете добавить это в свой профиль:

function Get-ChildContainer
{
    param(
            $root = "."
          )
    Get-ChildItem -path $root | Where-Object{$_.PsIsContainer}
}

New-Alias -Name gcc -value Get-ChildContainer -force

Затем ls каталоги в папке:

gcc C:\

Это решение будет немного ограничено, так как оно не будет обрабатывать такие причудливые вещи, как -Include, -Exclude, -Filter, -Recurse и т. Д., Но вы можете легко добавить это к функции.

На самом деле, это довольно наивное решение, но, надеюсь, оно направит вас в правильном направлении, если вы решите его использовать. Если честно с тобой, хотя я бы не стал беспокоиться. По моему личному мнению, дополнительная многословность в этом одном случае более чем преодолена общей большей гибкостью PowerShell.

2 голосов
/ 26 марта 2010
dir -Exclude *.*

Мне легче запомнить, чем

dir | ? {$_.PsIsContainer}

Кроме того, печатать быстрее, так как вы можете сделать -ex вместо -exclude или использовать tab для его расширения.

2 голосов
/ 26 августа 2009

Попробуйте:

ls | ? {$_.PsIsContainer}
0 голосов
/ 19 марта 2019

Теперь вы можете использовать Get-ChildItem -Directory или ls -dir для краткости. Это существовало по крайней мере с PowerShell 3.0 в соответствии с документацией Microsoft .

0 голосов
/ 14 сентября 2011

Я пришел к этой теме, потому что я пытаюсь понять, как работает "FOR / D". Ну, собственно, как использовать escape-команду (%) с параметром / D.

Я прочитал вышеупомянутые пункты с надеждой, честно говоря, все они намного сложнее, чем опция команды FOR - если это сработало, конечно.


Использование дополнительных форм для

Если включены расширения команд (то есть по умолчанию), поддерживаются следующие дополнительные формы для:

Только каталоги

Если set содержит подстановочные знаки (* и?), Указанная команда выполняется для каждого каталога (вместо набора файлов в указанном каталоге), который соответствует set. Синтаксис:

для / D {%% | Переменная%} в (set) do command [CommandLineOptions]

0 голосов
/ 27 августа 2009

Вы можете проверить старый пост в блоге команды PowerShell: http://blogs.msdn.com/powershell/archive/2009/03/13/dir-a-d.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...