【问题标题】:Batch File - Colored text only works outside of if批处理文件 - 彩色文本仅适用于 if
【发布时间】:2021-11-02 15:15:26
【问题描述】:

我对这段代码有疑问:

for %%n in (%listPath%) do (        
    echo Starting Build
    echo.
    devenv %%n /build Debug
        
    if ERRORLEVEL 1 (
        echo [101;93m ERROR: Error Build Project: %%n [0m
        pause > nul
        exit /b
    )
)

为什么echo [101;93m ERROR: Error Build Project: %%n [0m 行只能在if 语句之外工作?我想在if 中显示一个红色错误。

【问题讨论】:

  • 该行不会独立于位置为文本着色,缺少序列前面的转义字符
  • esc标签在代码中,是stackoverflow帮我删除了。
  • 如果我把它放在 if 之外,代码就可以工作。
  • 最好使用包含转义字符的变量,如for /F "delims=#" %%a in ('prompt #$E# ^& for %%a in ^(1^) do rem') do set "ESC=%%a" ,并使用echo %ESC%[101;93m ERROR: %ESC[m
  • 我想你的问题在别处。尝试一个最小的例子。首先在IF 之外回显它,然后在IF 内部回显,但没有其他代码。可能是您调用的程序之一,例如 devenv destroys 转义处理

标签: batch-file


【解决方案1】:

一个最小的例子按预期工作

@echo off

for /F "delims=#" %%a in ('prompt #$E# ^& for %%a in ^(1^) do rem') do set "ESC=%%a"

echo %ESC%[101;93m Test #1 %ESC%[0m
if 1==1 (
    echo %ESC%[42m Test #2 %ESC%[0m
)

它也适用于直接放置转义字符。


来自 cmets:
问题是由devenv引起的,可以通过重定向输出来解决。

devenv %%n /build Debug > NUL

底层问题描述:
SO: ANSI color Set Graphics Rendition breaking mid-batch and working after it proceeds

【讨论】:

  • 我怎样才能让它与 devenv 一起工作?
猜你喜欢
  • 2021-01-31
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
相关资源
最近更新 更多