PowerShell:如何排序System.IO.FileInfo数组并控制控制台输出
PowerShell排序FileInfo数组避免默认输出问题
问题原因
你执行的排序命令$queue | Sort-Object -property lastWriteTime未对输出做处理,PowerShell会自动将排序后的FileInfo对象数组以默认表格格式输出到控制台——这就是你看到1100+条目标格的原因。Out-Null无效是因为若仅单独执行带Out-Null的排序命令,后续未正确留存排序结果仍会触发输出;或是你直接执行排序命令却未将结果用于后续逻辑,导致排序输出被直接打印。
可行解决方案
方案1:将排序结果赋值给变量,再按需输出
先把排序后的数组存入变量避免直接输出,之后遍历变量输出指定字段:
# 排序结果存入变量,不会触发控制台输出 $sortedFiles = $queue | Sort-Object -Property LastWriteTime # 遍历变量输出自定义内容 foreach ($file in $sortedFiles) { Write-Host "文件名: $($file.Name) | 最后修改时间: $($file.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')) | 文件大小: $($file.Length) 字节" }
方案2:直接通过管道串联排序与输出逻辑
无需单独赋值,直接将排序结果通过管道传给ForEach-Object,一次性完成排序和自定义输出:
$queue | Sort-Object -Property LastWriteTime | ForEach-Object { Write-Host "文件名: $($_.Name) | 最后修改时间: $($_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')) | 文件大小: $($_.Length) 字节" }
方案3:输出指定属性的格式化表格
若希望用表格形式展示,但仅显示需要的列,可通过Select-Object筛选属性后格式化:
$queue | Sort-Object -Property LastWriteTime | Select-Object Name, LastWriteTime, Length | Format-Table -AutoSize
内容的提问来源于stack exchange,提问作者aksarben
相关产品推荐
相关产品推荐

