我发现了这段代码可以改变批处理文件中文本输出的颜色。请问有人可以解释一下它是如何工作的吗?
特别是,
特别是,
DEL
变量的用途让我感到困惑,如果没有前面的那些行,着色根本不起作用,但当我回显它时,DEL
变量似乎是空的。@echo on
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"
)
call :ColorText 0b "red"
echo(
call :ColorText 19 "yellow"
goto :eof
:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof
请解释一下for
循环和ColorText
方法。
$H
代表退格键,$E
代表转义代码。但是,您说您会获得<BACKSPACE><SPACE><BACKSPACE><ESCAPE>,如何实现的?另外,为什么要使用#
?为什么在findstr /v /a:%1 /R "^$" "%~2" nul命令中要使用nul? - Subham TripathiNUL
作为第二个文件。prompt $H给出了<backspace><space><backspace>
,文档是错误的。#
是自由选择的分隔符之一。 - jeb<nul
用于set /p
的输入,否则它将等待用户输入。set ".=%DEL%"
只是输出%DEL%
而没有换行符。 - jeb