我如何遍历文件夹,以便遵守字母(词汇)顺序,但是在进入旧目录的下一项之前,递归到任何目录?
澄清的样本结构:
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
真正麻烦的情况下正确执行递归和排序,但是我希望有一种更整洁的方法我也可以从中学习。
如果由于某种原因太难实现,那么保留处理项目的顺序是我最重要的底线,因为我可以不必保留树结构就可以这样做。
答案 0 :(得分:2)
无需手动递归,当您同时使用Get-ChildItem
和Sort-Object
时,Select-Object
会做您想要的事情。
Get-ChildItem
(带递归)可获取您的商品列表sort
和FullName
来按所需顺序放置项目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