Jus*_* R. 7 directory powershell scripting
我只想使用PowerShell列出当前工作目录下的所有目录.这很容易来自Bash shell:
ls -d */
Run Code Online (Sandbox Code Playgroud)
或Windows中的cmd.exe:
dir /a:d
Run Code Online (Sandbox Code Playgroud)
然而,使用PowerShell,我似乎无法使用单个命令来执行此操作.相反,我发现的唯一作品是:
ls | ? {$_Mode -like "d*"}
Run Code Online (Sandbox Code Playgroud)
这似乎过于冗长和涉及,我怀疑我不需要在那里单独的Where子句.Get-ChildItem的帮助并不清楚如何过滤模式.任何人都可以开导我吗?
这也有效:
ls | ?{$_.PsIsContainer}
Run Code Online (Sandbox Code Playgroud)
毫无疑问,它比bash或cmd.exe更加冗长.如果你想减少冗长,你当然可以在你的个人资料中添加一个函数和一个别名.我会看看我是否能找到一种方法来使用-filter.
在进一步调查中,我不相信有更简洁的方法来创建自己的函数和别名.你可以把它放在你的个人资料中:
function Get-ChildContainer
{
param(
$root = "."
)
Get-ChildItem -path $root | Where-Object{$_.PsIsContainer}
}
New-Alias -Name gcc -value Get-ChildContainer -force
Run Code Online (Sandbox Code Playgroud)
然后到文件夹中的目录:
gcc C:\
Run Code Online (Sandbox Code Playgroud)
这个解决方案有点受限,因为它不会处理像-Include,-Exclude,-Filter,-Recurse等任何想象,但你可以轻松地将它添加到函数中.
实际上,这是一个相当天真的解决方案,但如果您决定继续这样做,它希望它会引导您朝着正确的方向前进.说实话,虽然我不打扰.在我个人看来,一般情况下PowerShell的整体更大的灵活性可以克服这一案例中的额外冗长.
| 归档时间: |
|
| 查看次数: |
7676 次 |
| 最近记录: |