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

Batch批处理脚本如何固定顶部Logo使其不随聊天内容滚动

Batch脚本固定顶部Logo+滚动聊天区实现方案

实现逻辑

纯Batch原生没有窗口分区接口,采用以下逻辑实现需求:

  • 预先统计ASCII Logo+版本信息一共占用14行,将这部分定义为固定头部,每次刷新界面时优先绘制
  • 新增聊天记录数组存储所有历史对话,每次用户输入、机器人回复后,先清屏再重绘固定头部,最后输出指定范围内的聊天记录
  • 如需滚动查看历史,可新增页码变量,通过捕获用户按键调整显示的历史记录偏移量即可实现翻页功能

修改后的完整代码

@echo off
Mode con cols=90 lines=50
color 0B
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set "DEL=%%a")
setlocal EnableExtensions EnableDelayedExpansion
set "BotName=Amanda"
set "Name=Ikki"
set "Lines="
set "Columns="
for /F "tokens=1,2 delims=: " %%I in ('%SystemRoot%\System32\mode.com') do if "%%I" == "Lines" (set "Lines=%%J") else if "%%I" == "Columns" set "Columns=%%J"
<nul set /p=""
%SystemRoot%\System32\mode.com CON COLS=100 LINES=35
color 0b
title A.I. Chat Bot Amanda 0.2

:: 配置参数:Logo占用行数、聊天区显示行数
set "LOGO_LINES=14"
set "CHAT_SHOW_LINES=18"
set "chat_cnt=0"

:: 初始欢迎消息加入历史
set /a chat_cnt+=1
set "chat[!chat_cnt!]=<bot>: Hello I'am A.I. Chatbot but my users call me Amanda."

ping localhost -n 3 > nul

:DrawUI
cls
:: 绘制固定头部Logo
echo.
echo                      __      ____       ___  _   _    __    ____    ____  _____  ____  
echo                     /__\    (_  _)     / __)( )_( )  /__\  (_  _)  (  _ \(  _  )(_  _)   
echo                    /(__)\    _)(_     ( (__  ) _ (  /(__)\   )(     ) _   )(_)(   )(    
echo                   (__)(__)()(____)()   \___)(_) (_)(__)(__) (__)   (____/(_____) (__)
echo.
echo                                  __    __  __    __    _  _  ____     __   
echo                                 /__\  (  \/  )  /__\  ( \( )(  _ \   /__\  
echo                                /(__)\  )    (  /(__)\  )  (  )(_) ) /(__)\ 
echo                               (__)(__)(_/\/\_)(__)(__)(_)\_)(____/ (__)(__)
echo.
echo.
echo                                        (Prototype Version 0.2)
echo/
echo.
echo.

:: 绘制聊天记录:显示最近CHAT_SHOW_LINES条
set "start_line=1"
if !chat_cnt! GTR !CHAT_SHOW_LINES! set /a start_line=chat_cnt - CHAT_SHOW_LINES + 1
for /L %%i in (!start_line! 1 !chat_cnt!) do (
    set "line=!chat[%%i]!"
    if "!line:~0,4!" == "<bot>" (
        ECHO >nul && call :PainText 0C %BotName%
        echo !line:~4!
    ) else if "!line:~0,5!" == "<user>" (
        ECHO >nul && call :PainText 9 "%Name%"
        echo !line:~5!
    )
)

:Begin
echo.
ECHO >nul && call :PainText 9 "%Name%"
set "TALK="
set /P "TALK=: "
echo.
:: 空输入处理
if not defined TALK (
    ECHO >nul && call :PainText 0C "%BotName%"
    echo : TYPE SOMETHING, PLEASE!
    pause >nul
    goto DrawUI
)
set "TALK=!TALK:?=!"
if not defined TALK (
    ECHO >nul && call :PainText 0C "%BotName%"
    echo : TYPE SOMETHING, PLEASE!
    pause >nul
    goto DrawUI
)
:: 过滤特殊字符
set "TALK=!TALK:"= !"
set "TALK=!TALK:<= !"
set "TALK=!TALK:>= !"
set "TALK=!TALK:|= !"
set "TALK=!TALK:&= !"
set "TALK=!TALK:)= !"
if /I "%TALK%" == "exit" goto EndBatch

:: 用户输入加入历史
set /a chat_cnt+=1
set "chat[!chat_cnt!]=<user>: %TALK%"

set "Output=:"
:: 匹配回复
echo %TALK% | %SystemRoot%\System32\findstr.exe /I /R "\<hi\>" >nul && call :Hi
echo %TALK% | %SystemRoot%\System32\findstr.exe /I /R "\<hello\>" >nul && call :Hello
if "%Output%" == ":" set "Output=%Output% Sorry, I don't understand your last input."

:: 机器人回复加入历史
set /a chat_cnt+=1
set "chat[!chat_cnt!]=<bot>%Output%"

goto DrawUI

:Hi
:Hello
set /A Number=%RANDOM% %% 11
if %Number% == 0 set "Output=%Output% Hello, %name%!" & goto :EOF
if %Number% == 1 set "Output=%Output% What's up?" & goto :EOF
if %Number% == 2 set "Output=%Output% How is your day going?" & goto :EOF
if %Number% == 3 set "Output=%Output% Konichiwa %name%!" & goto :EOF
if %Number% == 4 set "Output=%Output% Yo!" & goto :EOF
if %Number% == 5 set "Output=%Output% Whazzup %name%!" & goto :EOF
if %Number% == 6 set "Output=%Output% Ohayo ;)" & goto :EOF
if %Number% == 7 set "Output=%Output% Hi I love you %name%!" & goto :EOF
if %Number% == 8 set "Output=%Output% Hi, what's up?" & goto :EOF
if %Number% == 9 set "Output=%Output% How's it going?" & goto :EOF
set "Output=%Output% Hey %Name%! Good to see you!" & goto :EOF

:PainText
<nul set /p "=%DEL%" > "%~2"
findstr /v /a:%1 "+" "%~2" nul
del "%~2" > nul
goto :eof

:EndBatch
color
if defined Lines if defined Columns %SystemRoot%\System32\mode.com CON COLS=%Columns% LINES=%Lines%
endlocal

补充说明

  • 如果觉得界面闪烁明显,可以调整CHAT_SHOW_LINES参数减少每次重绘的内容量
  • 如需添加滚动功能,可扩展使用choice命令捕获PageUp/PageDown按键,调整start_line的计算逻辑即可实现翻页查看全部历史记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:54:00