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

Oh My Posh Kali主题自定义:调用bat生成窗口宽度线条异常问题

解决Oh My Posh调用bat脚本时窗口宽度不更新的问题

问题背景

修改Oh My Posh的Kali主题时,添加了command类型的prompt段,通过cmd调用center.bat脚本,想在主提示符上方生成与窗口等宽的线条(因PowerShell兼容性问题选择cmd执行)。单独运行center.bat能正常匹配当前窗口宽度,但通过omp.json调用时,线条始终固定为120字符宽,和实际窗口宽度不符。尝试给bat传宽度参数,单独执行有效但主题里无效;用PowerShell的$Profile实现,仅在提示符启动时生效,窗口调整后不会更新宽度。

可行解决方案

方案1:修改bat脚本,实时获取窗口宽度

不要依赖外部传参,直接在center.bat内部获取当前窗口的宽度:

@echo off
setlocal enabledelayedexpansion
:: 提取当前窗口的列数(宽度)
for /f "tokens=2" %%a in ('mode con ^| findstr "Columns"') do set "cols=%%a"
:: 生成对应长度的线条
set "line="
for /l %%i in (1,1,%cols%) do set "line=!line!-"
echo !line!
endlocal

这样脚本每次执行都会实时读取当前窗口宽度,不管是单独运行还是被Oh My Posh调用,都能生成匹配的线条。

方案2:用PowerShell命令替代bat脚本

既然是在PowerShell环境下使用Oh My Posh,直接用PowerShell代码生成线条,绕开cmd调用的环境差异:
在omp.json的prompt配置段中,把command替换为PowerShell命令:

{
  "type": "command",
  "style": "plain",
  "command": "$cols = $Host.UI.RawUI.WindowSize.Width; '-' * $cols",
  "newline": true
}

每次提示符渲染时,都会实时获取当前PowerShell窗口的宽度,生成对应长度的线条,无需额外bat脚本,也不会有环境宽度不匹配的问题。

失效原因说明

  • 主题传参失效:Oh My Posh调用cmd时的环境未继承当前PowerShell的窗口宽度变量,导致传递的参数无效;
  • $Profile方案失效:$Profile中的代码仅在PowerShell启动时执行一次,窗口调整后不会重新运行,因此无法更新宽度。

内容的提问来源于stack exchange,提问作者Laplace'sDemon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:02:06