Cmd.exe字体突发变更问题:配置安装器选项触发异常排查
Cmd.exe字体异常问题排查(选项[2]触发)
我开发了一款带多安装选项的配置安装器,选择选项[2]后,Cmd.exe的字体突然变为非标准的特殊样式,找不到原因;其他用户使用该安装器时无此问题。
相关代码片段
:localization cls set "fz=" set "localization01=" set "localization02=" set "localization03=" set "localization04=" del /f /q "config_temp\installed.fz" 2>nul findstr /i /r /c:"FANTAZIA localization files have been installed successfully." "%apb%\APBGame\Localization\GER\EULA.GER" >nul 2>nul if %errorlevel%==0 ( set "localization01=[92m(+)[0m" @break > "config_temp\installed.fz" ) findstr /i /r /c:". colorized weapon names and categories.*\(\+\).*" "%apb%\APBGame\Localization\GER\EULA.GER" >nul 2>nul if %errorlevel%==0 ( set "localization02=disable colorized weapon names and categories" @break > "config_temp\installed.fz" ) else ( set "localization02=enable colorized weapon names and categories" ) findstr /i /r /c:". rainbow colored text in player inspect windows.*\(\+\).*" "%apb%\APBGame\Localization\GER\EULA.GER" >nul 2>nul if %errorlevel%==0 ( set "localization03=disable rainbow colored text in player inspect windows" @break > "config_temp\installed.fz" ) else ( set "localization03=enable rainbow colored text in player inspect windows" ) findstr /i /r /c:". fantazia related localization changes.*\(\+\).*" "%apb%\APBGame\Localization\GER\EULA.GER" >nul 2>nul if %errorlevel%==0 ( set "localization04=disable fantazia related localization changes" @break > "config_temp\installed.fz" ) else ( set "localization04=enable fantazia related localization changes" ) if exist "config_temp\installed.fz" ( xcopy /s /y /q "config\APBGame\Movies" "%apb%\APBGame\Movies" >nul xcopy /s /y /q "config\APBGame\Splash" "%apb%\APBGame\Splash" >nul ) else ( xcopy /s /y /q "config_backup\APBGame\Movies" "%apb%\APBGame\Movies" >nul xcopy /s /y /q "config_backup\APBGame\Splash" "%apb%\APBGame\Splash" >nul ) echo note: localization variations [2], [3] and [4] are togglable. echo. echo [2] install localization files %localization01% echo. echo [2] %localization02% echo. echo [3] %localization03% echo. echo [4] %localization04% echo. echo [5] create shortcut echo. echo [C] color picker echo. echo [U] uninstall echo. echo [B] go back set /p "="<nul for /f "skip=1 delims= eol=" %%$ in ('replace ? . /u /w') do if not defined # set "fz=%%$" & echo( goto localization_list :localization_list if "%fz%"=="" goto localization if /i "%fz%"=="1" goto localization/mission_titles if /i "%fz%"=="2" goto localization/colorized_weapon_names_and_categories_check if /i "%fz%"=="3" goto localization/rainbow_colored_text_in_player_inspect_windows_check if /i "%fz%"=="4" goto localization/fantazia_related_localization_changes_check if /i "%fz%"=="5" goto localization/shortcut if /i "%fz%"=="c" goto localization/color_picker/general if /i "%fz%"=="u" goto localization/uninstall if /i "%fz%"=="b" (goto menu) else (goto localization) :localization/colorized_weapon_names_and_categories_check if not exist "%apb%\APBGame\Localization\GER\EULA.GER" (goto localization/warning) findstr /i /c:". colorized weapon names and categories" "%apb%\APBGame\Localization\GER\EULA.GER" >nul if %errorlevel%==0 (goto localization/colorized_weapon_names_and_categories) else (goto localization/warning) :localization/colorized_weapon_names_and_categories findstr /i /r /c:". colorized weapon names and categories.*\(\+\).*" "%apb%\APBGame\Localization\GER\EULA.GER" >nul 2>nul if %errorlevel%==0 ( del /f /q "%apb%\APBGame\Localization\GER\InventoryItemTypes.GER" del /f /q "%apb%\APBGame\Localization\GER\ShopUIFilters.GER" echo [92mmodifying: EULA.GER ^(1^)[0m powershell -noprofile -command "$apb=(gc config_temp\path.txt)+'\APBGame\Localization\GER\EULA.GER';$null=new-item -force $apb -value ((gc -encoding utf8 $apb) -replace ('. colorized weapon names and categories.*\(\+\).*','. colorized weapon names and categories') | out-string)" goto localization ) findstr /i /r /c:". colorized weapon names and categories.*\(\+\).*" "%apb%\APBGame\Localization\GER\EULA.GER" >nul 2>nul if %errorlevel%==1 ( xcopy /s /y /q "config_localization variations\colorized weapon names and categories\APBGame" "%apb%\APBGame" >nul echo [92mmodifying: EULA.GER ^(1^)[0m powershell -noprofile -command "$apb=(gc config_temp\path.txt)+'\APBGame\Localization\GER\EULA.GER';$null=new-item -force $apb -value ((gc -encoding utf8 $apb) -replace ('. colorized weapon names and categories.*','. colorized weapon names and categories <color:R=0.078 G=1 B=0>(+)<color:/>') | out-string)" goto localization )
排查与解决建议
- ANSI转义序列兼容性问题:代码中使用
[92m这类ANSI颜色代码,部分Cmd环境因缺少转义符(正确格式应为\e[92m)或不支持虚拟终端,导致解析错误触发字体变更。可在脚本开头添加开启虚拟终端支持的命令:reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 /f >nul 2>nul - PowerShell操作的隐性影响:选项[2]中的PowerShell命令可能临时修改控制台代码页,可在调用前后重置代码页:
chcp 65001 >nul powershell -noprofile -command "...你的原命令..." chcp 437 >nul - 本地环境异常:其他用户无此问题,大概率是本地控制台字体缓存损坏或第三方工具(杀毒软件、MOD管理器等)干扰。可右键Cmd窗口标题栏→属性→字体→选择默认字体(如Consolas)→点击“默认值”保存;同时临时关闭第三方工具测试。
内容的提问来源于stack exchange,提问作者leiseg
相关产品推荐
相关产品推荐

