【发布时间】:2019-09-17 08:48:50
【问题描述】:
虽然“如何在 Windows 命令行中使用不同颜色回显”在这里得到了广泛的解释
How to echo with different colors in the Windows command line
正如 chersun 已经指出的那样,它在 for 循环中失败:
@JensA.Koch 这太棒了。但我在 for 循环中运行时遇到问题。只有第一个回显得到正确着色,之后所有其他回显只打印所有转义字符而不是更改任何内容。批处理文件是将每个文件夹存档到单独的存档中,尝试以粗体输出文件夹名称,然后是带有 findstr 过滤的存档器标准输出。 – chersun 2018 年 4 月 22 日 21:36
我正在提出一个新问题,因为我没有足够的声誉在上述问题中发帖。
我发现的唯一解决方案是在 for 命令之后(在 do 块内)包含一个虚拟 CMD /C Echo/ 作为解决方法。
有没有更好的方法?
TIA
编辑: 感谢cmets,这里是批处理文件
出块,颜色很好。 如果删除的问题消失,则问题与 CHOICE 相关。 解决方案是包含“空”CMD
对执行回答 Y 以查看失败的输出
@ECHO OFF
for /F %%a in ('echo prompt $E ^| cmd') do set "_esc=%%a"
set _redon=%_esc%[91m
set _greenon=%_esc%[92m
set _coloff=%_esc%[0m
SET _free=1000
SET _used=2000
ECHO %_redon%!_used!%_coloff% / %_greenon%!_free!%_coloff%
SETLOCAL EnableDelayedExpansion
FOR /L %%A IN (1,1,5) DO (
CHOICE /C YN /T 5 /D N /N /M "Press Y to process %%A"
IF "!ERRORLEVEL!"=="1" (
SET _free=1000
SET _used=2000
REM needed CMD to return proper behaviour
REM CMD /C echo/
ECHO %_redon%!_used!%_coloff% / %_greenon%!_free!%_coloff%
)
)
PAUSE
EXIT
感谢@Stephan 美化代码。
【问题讨论】:
-
在此处查看答案,了解适用于所有 Windows 计算机的方法stackoverflow.com/questions/54657208/…
-
抱歉,虽然我试图专注于问题,但在这里作为新手并没有帮助......我想知道它为什么会失败,以及是否有比使用 CMD /C Echo 更好的解决方案/ - 我不需要交叉移植或使用外部程序或更改技术 - 对我来说,使用转义码是非常严格的。只有引入 CHOICE 和 IF 才能打破“正常”运行。据我所知,中断是调用外部程序时的预期行为,但使用 CHOICE???
-
因为是Windows的新特性所以大部分Windows都不能使用。您还必须打开它。请参阅
set /?了解延迟扩展。