Windows程序字体显示异常求助:PowerShell命令疑似引发问题
Windows程序字体显示异常问题排查与修复建议
- 问题描述:开发的Windows程序功能正常,但字体显示极为难看,调试后怀疑与调用PowerShell获取文件夹大小的命令相关,示例命令如下:
for /f "usebackq tokens=*" %%a in (`powershell -command "('{0:N1}' -f ((Get-ChildItem -Path 'C:\$Recycle.Bin\%sid%' -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1MB))"`) do set size1=%%a
程序中包含大量同类获取文件夹大小的命令,且CLI集成了选择、选项高亮等功能,代码量较大无法完整提供,程序运行截图:
可能的原因及修复方案
编码不匹配导致渲染异常
命令行调用PowerShell时,默认输出编码可能和程序的字体渲染编码不一致,引发乱码或显示畸形。可以在PowerShell命令中强制指定输出编码:
修改后的示例命令(指定UTF-8编码):for /f "usebackq tokens=*" %%a in (`powershell -OutputEncoding utf8 -command "('{0:N1}' -f ((Get-ChildItem -Path 'C:\$Recycle.Bin\%sid%' -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1MB))"`) do set size1=%%a格式化输出的字符适配问题
PowerShell中{0:N1}的格式化输出会带千分位分隔符等特殊字符,若程序使用的字体不支持这些字符,就会显示异常。建议把格式化逻辑移到程序内部处理:
先让PowerShell输出原始数值:for /f "usebackq tokens=*" %%a in (`powershell -command "((Get-ChildItem -Path 'C:\$Recycle.Bin\%sid%' -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1MB)"`) do set size1=%%a再在程序里对
size1的值进行小数位数格式化,避免CLI输出的特殊字符干扰字体渲染。批量命令拖慢UI线程
大量递归遍历文件夹的PowerShell命令会占用较多系统资源,可能导致UI线程卡顿,间接影响字体渲染的流畅性。可以优化命令执行效率:- 改用更高效的
System.IO类方法替代Get-ChildItem:[System.IO.Directory]::EnumerateFiles('C:\$Recycle.Bin\%sid%', '*', [System.IO.SearchOption]::AllDirectories) | ForEach-Object { [System.IO.FileInfo]::new($_).Length } | Measure-Object -Sum | Select-Object -ExpandProperty Sum - 尝试批量获取多个文件夹大小,减少PowerShell进程的启动次数。
- 改用更高效的
内容的提问来源于stack exchange,提问作者Missile319
相关产品推荐
相关产品推荐

