首页 > 解决方案 > 以字母顺序,深度优先顺序递归迭代?

问题描述

如何遍历文件夹,以便尊重字母(词汇)顺序,但在转到旧目录的下一项之前递归到任何目录?

用于澄清的示例结构:

Α
  |- 1.txt
  |- 2.txt
  |- 3
  | |- a.txt
  | \- b.txt
  \- 4.txt
贝塔
  \- 测试
     \- 其他
        \- 文件.txt

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

Α
1.txt
2.txt
3
一个.txt
b.txt
4.txt
贝塔
测试
其他
文件

但是,我似乎无法弄清楚如何正确地进行递归和排序,而不会使Get-ChildItem手动递归的嵌套变得非常糟糕,但我希望有一种更简洁的方法我也可以从中学习。

如果由于某种原因这太难以实现,那么保留处理项目的顺序是对我来说重要的底线,因为如果必须的话,我可以在不保留树结构的情况下做到这一点。

标签: powershellget-childitem

解决方案


不需要手动递归,当你也使用和Get-ChildItem时会做你想做的事。Sort-ObjectSelect-Object

  • Get-ChildItem使用递归获取您的项目列表
  • sort通过FullName将项目按您想要的顺序放置
  • selectName仅显示项目名称的属性

给出:

Get-ChildItem C:\folder -Recurse | sort FullName | select -ExpandProperty Name

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

推荐阅读