如何按升序从文件夹中获取所有文本文件?

How to get all text files from a folder in ascending sequence?

我正在使用此代码:

Get-ChildItem "D:\Powercel\TimeStats\TimeStats_50slots" -Filter *.txt |Foreach-Object{
    write-host $_.BaseName             
    $cnt= $_.BaseName.Length
    if($cnt -eq 23){
        $f= $_.BaseName.Substring(0,$_.BaseName.Length-1) 
    }ElseIf($cnt -eq 24){
        $f= $_.BaseName.Substring(0,$_.BaseName.Length-2)
    }ElseIf($cnt -eq 25){
        $f= $_.BaseName.Substring(0,$_.BaseName.Length-3)
    }

    if($f -match "21_01_2016_13TimeStats"){
        $data = Get-Content $_.FullName -Encoding Unicode 
        foreach ($line in $data){
            write-host $line
        }
    }
}

我能够从文件夹中获取所有文本文件,但它们的顺序不同。像这样:

1 个文件比 10 个文件比 11 ->12 ->13 和比 2 个文件比 3 -> 4 这样。

但是我需要这样的顺序1->2->3->4->5.......13

文件名如下:

21_01_2016_13TimeStats1.txt
21_01_2016_13TimeStats2.txt
21_01_2016_13TimeStats3.txt
21_01_2016_13TimeStats4.txt
# etc...

所以有人可以帮我吗???

使用Sort-Object.

默认情况下,Sort-Object 执行字母排序,因此您必须使用排序表达式,在排序期间将文件基本名称的最后部分转换为 int。

鉴于你的文件名看起来像 [date]TimeStats[number].txt,你可以这样做:

('21_01_2016_13TimeStats2' -split '\D'|Select -Last 1) -as [int]

获取末尾的数字并转换为[int]:

Get-ChildItem *.txt |Sort-Object { ($_.BaseName -split '\D'|Select -Last 1) -as [int] } |ForEach-Object { <# do your thing #> }

PowerShell 2.0 没有未经检查的类型转换运算符 -as,因此您必须这样做:

Get-ChildItem *.txt |Sort-Object { try{[int]($_.BaseName -split '\D'|Select -Last 1)}catch{} } |ForEach-Object { <# do your thing #> }