批处理 - 用户输入的彩色输入

3

你好,我正在制作一个可以从文件夹启动程序的程序。以下是代码:

@echo off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
  set "DEL=%%a"
)
title Launcher
call :ColorText 0a "Launcher"
echo.
:CMD
set /p cmd=">>> "
if not defined cmd goto CMD
call "%CD%"\bin\%cmd%
echo %cmd%>"%CD%\Commands_Log\%cmd%
goto CMD
:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof

我真的想知道如何给用户输入着色。例如,我的提示如下:

C:\ > abcd

现在,我该如何仅将“abcd”部分着色?

编辑:我希望在用户输入时对其进行着色。这是我的最初问题,对于没有理解的人。


没有传统的方法可以做到这一点,但是你可以在其中放置一个选择命令,将输入的字母添加到一个变量中,然后以不同的颜色显示。虽然我不建议这样做。 - BDM
@Vicky 这不是重复的问题...我想让输入框有颜色...只有输入框... - chetasmr
3个回答

7

正如Pick教授所说,您需要编写自己的关键输入,然后用颜色输出每个关键字。

批处理中的着色可以使用Findstr进行操作,详情请参见如何在批处理文件中使用多种颜色?
使用xcopy可以获取单个关键字。

@echo off
call :color_init
setlocal EnableDelayedExpansion

:keyLoop
call :GetKey
if not defined key exit /b
call :color 1a key
goto :keyLoop


:GetKey
set "key="
for /F "usebackq delims=" %%L in (`xcopy /L /w "%~f0" "%~f0" 2^>NUL`) do (
  if not defined key set "key=%%L"
)
set "key=%key:~-1%"
exit /b

:color_init
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
  set "DEL=%%a"
)
rem Prepare a file "X" with only one dot
<nul > X set /p ".=."
exit /b

:color
setlocal EnableDelayedExpansion
set "param=!%~2!"
set "param=!param:"=\"!"
findstr /p /A:%1 "." "!param!\..\X" nul
<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"
endlocal
exit /b

for /f "delims=" %%A in ('echo hello') do set "var=%%A"
echo %var%
exit /b

1

是的,使用 cmdcolor 是可以实现的。只需在输入之前输入echo \033[93m,然后在之后输入echo \033[0m。在这两个echo之间输入的所有内容都将变成黄色。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接