如何在Windows批处理文件中使用多种颜色?
如何在Windows批处理文件中使用多种颜色?
在Windows批处理文件中使用多种颜色可以通过以下方法实现。首先,在批处理文件中添加以下代码:
off
setlocal
call :Echo.Color.Init
goto main
:Echo.Color %1=Color %2=Str [%3=/n]
setlocal enableDelayedExpansion
set "str=%~2"
:Echo.Color.2
set "str=a%ECHO.DEL%!str:\=a%ECHO.DEL%\..\%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%!"
set "str=!str:/=a%ECHO.DEL%/..\%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%!"
set "str=!str:"=\"!"
pushd "%ECHO.DIR%"
findstr /p /r /a:%~1 "^^-" "!str!\..\!ECHO.FILE!" nul
popd
for /l %%n in (1,1,12) do if not "!ECHO.FILE:~%%n!"=="" <nul set /p "=%ECHO.DEL%"
<nul set /p "=%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%"
if not "%~3"=="" echo.
endlocal & goto :eof
:Echo.Color.Var %1=Color %2=StrVar [%3=/n]
if not defined %~2 goto :eof
setlocal enableDelayedExpansion
set "str=!%~2!"
goto :Echo.Color.2
:Echo.Color.Init
set "ECHO.COLOR=call :Echo.Color"
set "ECHO.DIR=%~dp0"
set "ECHO.FILE=%~nx0"
set "ECHO.FULL=%ECHO.DIR%%ECHO.FILE%"
for /F "tokens=1 delims=#" %%a in ('"prompt #$H# & echo on & for %%b in (1) do rem"') do set "ECHO.DEL=%%a"
goto :eof
:main
call :Echo.Color 0a "a"
call :Echo.Color 0b "b"
set "txt=^" & call :Echo.Color.Var 0c txt
call :Echo.Color 0d "<"
call :Echo.Color 0e ">"
call :Echo.Color 0f "&"
call :Echo.Color 1a "|"
call :Echo.Color 1b " "
call :Echo.Color 1c "%%%%"
call :Echo.Color 1d ^"""
call :Echo.Color 1e "*"
call :Echo.Color 1f "?"
call :Echo.Color 2b "."
call :Echo.Color 2c ".."
call :Echo.Color 2d "/"
call :Echo.Color 2e "\"
call :Echo.Color 2f "q:" /n
echo(
set complex="c:\hello world!/.\..\\a//^<%%>&|!" /^^^<%%^>^&^|!\
call :Echo.Color.Var 74 complex /n
exit /b
-
此代码段实现了在Windows批处理文件中使用多种颜色的功能。它使用了许多内部命令和变量来实现这个目标。
这个问题出现的原因是因为在Windows批处理文件中默认只能使用一种颜色。然而,有时候我们希望在批处理文件中使用多种颜色来增强可读性和可视化效果。
解决方法是使用上面提到的代码段。这段代码使用了一个名为"Echo.Color"的子程序,该子程序可以在Windows批处理文件中使用不同的颜色输出文本。
通过调用"Echo.Color"子程序并传递颜色代码和要输出的字符串作为参数,我们可以在Windows批处理文件中使用多种颜色输出文本。
这段代码使用了一些技巧来实现多种颜色输出。它使用了"findstr"命令来搜索字符串,并使用"pushd"和"popd"命令来改变当前目录。
在使用这段代码之前,我们需要将它添加到我们的批处理文件中。然后,我们可以调用"Echo.Color"子程序来输出不同颜色的文本。
通过使用这种方法,我们可以在Windows批处理文件中实现多种颜色的输出,从而增强了可读性和可视化效果。这对于编写复杂的批处理脚本非常有用。
总结起来,要在Windows批处理文件中使用多种颜色,我们可以使用上述代码段。这段代码使用了一些技巧和命令来实现多种颜色的输出。通过调用"Echo.Color"子程序并传递颜色代码和要输出的字符串作为参数,我们可以在Windows批处理文件中使用多种颜色输出文本。这种方法能够增强可读性和可视化效果,对于编写复杂的批处理脚本非常有用。
如何在Windows批处理文件中使用多种颜色?
在这个问题中,作者试图解决在Windows批处理文件中使用多种颜色的问题。作者发现之前的解决方法存在一些问题,例如无法正确处理特定字符串。为了解决这些问题,作者对之前的技术进行了修改,并提出了一种新的解决方法。改进之处包括使用%TEMP%位置作为临时文件的位置,因此不再需要对当前目录具有写入访问权限;创建了两个变体,一个接受字符串字面值,另一个接受包含字符串的变量的名称;添加了一个可选的第三个参数/n的选项,用于在输出的末尾添加换行符。
然而,该方法在行折行时无法正常工作,因为退格键在跨行时不起作用。作者提到,如果控制台的行宽为80,那么打印长度在74到79之间的字符串将无法正常工作。
作者提供了示例代码来演示如何在批处理文件中使用多种颜色。作者还提到这种方法在Windows XP上无法正常工作,因为FINDSTR在屏幕上将退格键显示为句点。
最后,其他用户提出了一些相关问题和建议,例如如何处理用于制作类似DOS菜单的字符,以及一些关于代码运行错误的问题。其他用户还提供了一种替代方法的链接,以解决速度和字符问题。
根据以上内容,可以整理成一篇文章,介绍如何在Windows批处理文件中使用多种颜色,并提供了相关的代码示例和解决方法。
如何在Windows批处理文件中使用多个颜色?
你可以在没有任何外部程序的情况下进行多颜色输出。
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" ) echo say the name of the colors, don't read call :ColorText 0a "blue" call :ColorText 0C "green" call :ColorText 0b "red" echo( call :ColorText 19 "yellow" call :ColorText 2F "black" call :ColorText 4e "white" goto :eof :ColorText echo off <nul set /p ".=%DEL%" > "%~2" findstr /v /a:%1 /R "^$" "%~2" nul del "%~2" > nul 2>&1 goto :eof
它使用findstr命令的颜色功能。
Findstr可以配置为以定义的颜色输出行号或文件名。
所以我首先创建一个文件,以文本作为文件名,并且内容是一个单一的
然后我搜索文件和nul中的所有非空行,因此文件名将以正确的颜色输出,附加有一个冒号,但是冒号会立即被
EDIT: 一年后 ... 所有字符都有效
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" ) rem Prepare a file "X" with only one dot <nul > X set /p ".=." call :color 1a "a" call :color 1b "b" call :color 1c "^!<>&| %%%%"*?" exit /b :color set "param=^%~2" ! set "param=!param:"=\"!" findstr /p /A:%1 "." "!param!\..\X" nul <nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%" exit /b
这使用了有效路径/文件名的规则。
如果路径中有\..\
,那么前缀元素将被完全删除,并且不必要的是该元素只包含有效的文件名字符。
好了,这个方法效果很好,但是否有办法将输入的数量减少到一行代码?是否可以将其设置为名为“defcolor”的全局变量,并且每次打开命令提示符时都能使用它(通过导入或将其设置为系统变量)?
你能给我展示一个我可以用来做这个的模板吗?比如“findstr”命令的模板是类似“FINDSTR /A /File[Filename] /Path[path]”这样的,一个通用的模板,我可以用作未来使用的指南。
这是一个创造性和有趣的解决方案,但不幸的是,它仅限于显示文件名中有效的文本字符,这可能会成为一个阻碍,例如,如果您无法控制要显示的文本(例如,您正在以红色输出构建日志文件中的错误)。如果有一个绕过这个限制的方法就太好了...
. Bungle: 但是现在,所有其他字符也有效了 🙂
我会给+1,但是在你的编辑之前我已经这样做了 🙂 它仍然无法处理所有字符。请参阅我的答案:stackoverflow.com/a/10407642/1012053
- 我知道它对某些字符无效,我看到了解决方案,但是我太懒了,没能解决它 🙂
一旦更改颜色,如何换行?
要换行,只需使用echo(
在退出之前应该删除临时文件.. del /f /q X
;)非常好的解决方案..
你好,谢谢你的工作,第二个解决方案有效,除了冒号(:)字符会生成错误。另外,你可以解释一下这段代码在做什么吗?特别是初始化循环,然后是set /p命令?
在退出之前应该删除临时文件.. del /f /q X
;)非常好的解决方案..
你好,谢谢你的工作,第二个解决方案有效,除了冒号(:)字符会生成错误。另外,你可以解释一下这段代码在做什么吗?特别是初始化循环,然后是set /p命令?
在退出之前应该删除临时文件.. del /f /q X
;)非常好的解决方案..
你好,谢谢你的工作,第二个解决方案有效,除了冒号(:)字符会生成错误。另外,你可以解释一下这段代码在做什么吗?特别是初始化循环,然后是set /p命令?
有人可以使用该代码将其写成C/C++程序吗?每次创建一个临时文件真的很烦人。