我正在使用此代码:
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...
所以有人可以帮帮我吗???
答案 0 :(得分:3)
使用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 #> }