我只想使用PowerShell列出当前工作目录下的所有目录。这很容易来自Bash shell:
ls -d */
Windows中的或cmd.exe:
dir /a:d
使用PowerShell但是我似乎无法使用单个命令来执行此操作。相反,我发现唯一有效的是:
ls | ? {$_Mode -like "d*"}
这似乎过于冗长和涉及,我怀疑我在那里不需要单独的Where子句。 Get-ChildItem的帮助并不清楚如何过滤模式。谁能开导我?
答案 0 :(得分:5)
这也有效:
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
然后找到文件夹中的目录:
gcc C:\
这个解决方案会受到一些限制,因为它不会处理像-Include,-Exclude,-Filter,-Recurse等任何想法,但你可以轻松地将它添加到函数中。
实际上,这是一个相当天真的解决方案,但如果您决定继续这样做,它希望它会引导您朝着正确的方向前进。说实话,虽然我不打扰。在我个人看来,一般情况下,PowerShell的整体更大的灵活性可以克服这个案例中的额外冗长。
答案 1 :(得分:2)
尝试:
ls | ? {$_.PsIsContainer}
答案 2 :(得分:2)
dir -Exclude *.*
我发现这比
更容易记住dir | ? {$_.PsIsContainer}
另外,输入速度更快,因为你可以做-ex而不是-exclude或使用tab来扩展它。
答案 3 :(得分:0)
您可以在PowerShell团队博客上查看旧帖子:http://blogs.msdn.com/powershell/archive/2009/03/13/dir-a-d.aspx
答案 4 :(得分:0)
我来到这个主题是因为我想弄清楚“FOR / D”是如何工作的。实际上,如何使用带有/ D选项的批处理命令转义符(%)。
我充满希望地阅读了上述内容,说实话它们比FOR命令选项复杂得多 - 如果它当然有效。
使用其他形式的
如果启用了命令扩展(即默认设置),则支持以下其他形式的for:
仅限目录
如果set包含通配符(*和?),则为匹配set的每个目录(而不是指定目录中的一组文件)执行指定的命令。语法是:
表示/ D {%% | (set)中的%}变量执行命令[CommandLineOptions]
答案 5 :(得分:0)
您现在可以简称为Get-ChildItem -Directory
或ls -dir
。至少自Microsoft's documentation起,PowerShell 3.0以来就存在这种情况。