You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell导出文件查询结果到txt时格式异常如何解决

PowerShell导出最小文件列表格式异常修复

问题现象

编写递归查找体积最小2个文件的PowerShell脚本时,导出的txt内容显示为结构化对象的默认字符串格式,无法清晰查看文件名与对应大小:
原脚本代码:

$checksize = gci -r| sort -descending -property length | select -last 2 name, length | Add-Content -Path C:\log.txt

导出的异常内容:

@{Name=fileexample.txt; Length=3482342}
@{Name=server.iso; Length=548238474}

问题原因

直接将Select-Object返回的自定义对象管道传给Add-Content时,PowerShell会默认调用对象的ToString()方法做转换,最终输出的就是你看到的@{属性=值}类型标记格式,并非可读的结构化展示。另外原脚本存在两个逻辑瑕疵:

  • 未加-File参数,递归结果会包含目录对象,目录无有效Length属性,会干扰排序结果
  • 采用降序排序取最后2个的写法,逻辑等价于升序取前2个,但可读性较差

修复方案

方案1:导出为可读表格格式

直接用Out-File接收格式化后的对象输出,会自动生成对齐的纯文本表格,适合快速查看:

Get-ChildItem -Recurse -File | 
  Sort-Object -Property Length | 
  Select-Object -First 2 Name, Length | 
  Out-File -FilePath C:\log.txt -Encoding utf8

导出效果示例:

Name            Length
----            ------
fileexample.txt 3482342
test.txt        1234

方案2:自定义每行输出格式

如果需要自定义展示字段、文字描述,可以遍历对象手动拼接字符串后写入,灵活度更高:

Get-ChildItem -Recurse -File | 
  Sort-Object -Property Length | 
  Select-Object -First 2 Name, Length |
  ForEach-Object {
    "文件名:$($_.Name) | 文件大小(字节):$($_.Length)"
  } |
  Add-Content -Path C:\log.txt -Encoding utf8

导出效果示例:

文件名:fileexample.txt | 文件大小(字节):3482342
文件名:test.txt | 文件大小(字节):1234

注意:写入文件时建议显式指定-Encoding utf8参数,避免不同PowerShell版本默认编码不一致导致的乱码问题。

内容的提问来源于stack exchange,提问作者Mike_Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:15:41