如何按升序从文件夹中获取所有文本文件?
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 #> }
我正在使用此代码:
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 #> }