以字母顺序,深度优先的顺序递归迭代吗?

时间:2019-02-25 12:04:39

标签: powershell get-childitem

我如何遍历文件夹,以便遵守字母(词汇)顺序,但是在进入旧目录的下一项之前,递归到任何目录?

澄清的样本结构:

Alpha
  |- 1.txt
  |- 2.txt
  |- 3
  |  |- a.txt
  |  \- b.txt
  \- 4.txt
Beta
  \- Test
     \- Another
        \- File.txt

我想以这样一种方式进行迭代:如果我要打印所有附带的项目,结果将如下所示:

Alpha
1.txt
2.txt
3
a.txt
b.txt
4.txt
Beta
Test
Another
File

但是,我似乎无法弄清楚如何在不进行手动递归的嵌套Get-ChildItem真正麻烦的情况下正确执行递归和排序,但是我希望有一种更整洁的方法我也可以从中学习。

如果由于某种原因太难实现,那么保留处理项目的顺序是我最重要的底线,因为我可以不必保留树结构就可以这样做。

2 个答案:

答案 0 :(得分:2)

无需手动递归,当您同时使用Get-ChildItemSort-Object时,Select-Object会做您想要的事情。

  • Get-ChildItem(带递归)可获取您的商品列表
  • sortFullName来按所需顺序放置项目
  • select的{​​{1}}属性仅显示项目名称

礼物:

Name

答案 1 :(得分:1)

可以通过简单的递归包装函数来解决:

function Get-ChildItemDepthFirst
{
  param(
    [Parameter(Mandatory = $true)]
    [ValidateScript({Test-Path $_ -PathType Container})]
    [string]$LiteralPath = $PWD
  )

  foreach($item in Get-ChildItem @PSBoundParameters){
    # Output current item name
    $item.Name
    # Check to see if item is a folder, if so recurse
    if($item -is [System.IO.DirectoryInfo]){
      Get-ChildItemDepthFirst -LiteralPath $item.FullName
    }
  }
}

FWIW,我个人想去James C.'s elegant approach