choice
命令通常用于批量编码。它有/n
选项来隐藏ChoiceKeys。 This robvanderwoude.com page解释了如何使用ANSI序列突出显示特定的文本属性。但它并没有在实际批量代码中提供使用示例。
所以,我问是否可以使用ANSI序列突出显示CHOICE命令中的默认选项,即使用粗体或下划线,可能使用包含一个或所有选择字母的变量消息?或者,可能有不同的方法来实现这一点,除了在短信中使用(C)apital字母作为默认选择?
choice /c ox /n /m "C(o)ntinue or e(x)it?" /t 20 /d o
ANSI序列支持is back in Windows 10,但Microsoft没有提供代码使用示例。
答案 0 :(得分:2)
我最初尝试了这种方法:
choice /c ox /n /m "C(%ESC%[1;33mo%ESC%[0m)ntinue or e(x)it?" /t 20 /d o
但是,似乎choice
命令将其消息直接发送到屏幕,绕过ANSI驱动程序管理,因此此方法不起作用(至少在我的系统上不起作用)。
解决这一问题的方法是使用单独的set /P
命令来显示消息,然后执行choice
命令而不显示消息:
@echo off
setlocal
for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
echo Normal text%ESC%[1;31m RED TEXT%ESC%[1;32m GREEN TEXT%ESC%[0m
echo/
set /P "=C(%ESC%[1;33mo%ESC%[0m)ntinue or e(x)it? " < NUL
choice /c ox /n /t 20 /d o
echo Option: %errorlevel%
这是输出:
注意:这个答案只是解决了原始问题中所述的“如何使用ANSI序列突出显示CHOICE命令中的默认选项”这一点。我没有触及任何特定机器上ANSI序列可用性的观点;这是完全不同的事情。
答案 1 :(得分:0)
大!由于代码格式在Stack Overflow评论中不起作用,我将其作为答案发布。 Aacini的CHOICE消息代码在没有set /P
的Windows 10 64位中运行良好(在我的电脑上)。
然而,可能有一种更简单的方法来实现这一目标? :)也许我们应该回顾一下,在类似的情况下如何在Windows 95中完成(尽管CHOICE命令还没有)。无论如何,似乎FOR行可以在具有多个颜色消息的批处理中添加一次。以上代码仅适用于支持ANSI序列的Windows版本。
@echo off
setlocal
for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
choice /c ox /n /m "C(%ESC%[1;33mo%ESC%[0m)ntinue or e(x)it?" /t 20 /d o
echo Option: %errorlevel%
:eol