PowerShell中如何去除Format-Table输出结果中的省略号?
PowerShell的Format-Table命令的-AutoSize参数只会在当前控制台的宽度限制内自动调整列宽,一旦内容总宽度超过控制台宽度,就会自动截断超长列并用省略号替代,不受-AutoSize参数影响。
解决方案
你可以通过以下几种方法避免内容被截断:
- 方法1:搭配
Out-String指定足够的输出宽度
指定一个超过最长文本长度的宽度值(建议设置为2048/4096这类大值),即可突破控制台宽度限制完整展示内容:
gci -Path 'C:/ProgramData/Paessler/PRTG Network Monitor/Logs' -Include '*.*' -Recurse -ea SilentlyContinue ` | Format-Table -Property CreationTimeUtc, Length, FullName -AutoSize ` | Out-String -Width 4096
- 方法2:添加
-Wrap参数实现超长内容自动换行
不需要保持单行展示的场景下,开启自动换行即可让超长内容折行显示,不会出现省略号:
gci -Path 'C:/ProgramData/Paessler/PRTG Network Monitor/Logs' -Include '*.*' -Recurse -ea SilentlyContinue ` | Format-Table -Property CreationTimeUtc, Length, FullName -AutoSize -Wrap
- 方法3:自定义长字段列宽
可以单独给超长的FullName字段指定足够大的列宽,确保内容完整展示:
gci -Path 'C:/ProgramData/Paessler/PRTG Network Monitor/Logs' -Include '*.*' -Recurse -ea SilentlyContinue ` | Format-Table -Property CreationTimeUtc, Length, @{Name='FullName'; Expression={$_.FullName}; Width=300} -AutoSize
- 方法4:切换为列表格式输出
无强制表格格式要求的场景下,使用Format-List可以直接展示所有字段的完整内容:
gci -Path 'C:/ProgramData/Paessler/PRTG Network Monitor/Logs' -Include '*.*' -Recurse -ea SilentlyContinue ` | Format-List -Property CreationTimeUtc, Length, FullName
- 方法5:导出为文件留存完整数据
如果需要后续使用数据,直接导出为CSV文件不会有任何截断问题:
gci -Path 'C:/ProgramData/Paessler/PRTG Network Monitor/Logs' -Include '*.*' -Recurse -ea SilentlyContinue ` | Select-Object -Property CreationTimeUtc, Length, FullName ` | Export-Csv -Path 'C:\log_list.csv' -Encoding UTF8 -NoTypeInformation
内容的提问来源于stack exchange,提问作者opedroso
相关产品推荐
相关产品推荐

