我如何将此批次选择描述移动到换行符?

我如何将此批次选择描述移动到换行符?

我有一个批处理脚本模板,其中包含一个选项,我想提出最终用户想要做什么的问题,并在问题下方提供选项描述。这是我的模板:

@ECHO OFF
Color __
TITLE %TITLE%
ECHO.
:choice
set /P c=Do you want to %CHOICE%? & ECHO.(%DESCRIPTION%)
if /I "%c%" EQU "Y" goto :choice_yes
if /I "%c%" EQU "C" goto :choice_cancel
goto :choice
:choice_cancel
echo %CHOICE% has been cancelled.
:choice_yes
:: Insert additional commands or code here.
pause
@ECHO OFF

正如您在脚本中看到的,我已经尝试过& ECHO.(%DESCRIPTION%)插入新行的其他方法。我认为ECHO使用上述方法时,实际选择题前需要添加一个附加行,但由于代码结构,我不知道将其放在哪里。我做错了什么?是否有某个字符由于语法原因需要转义?

答案1

如果你想问和输入光标要位于描述输出上方,您需要一种方法来将光标向上移动。批处理脚本无法单独完成此操作(尽管 PowerShell 可以);您需要一个小型外部工具,该工具使用 Windows 控制台 API 将光标向上移动几行。

如果你想唯一的问题位于描述之上,让提示在所有内容下方闪烁,这很容易 - 只需使用单独的命令输出问题:

echo Do you want to %CHOICE%?
echo %DESCRIPTION%
set /p ANSWER=^>
echo You entered %ANSWER%.

由于其他原因,您最初的尝试没有成功。

set是完全独立的命令——用而不是换行符echo来分隔它们并不重要;它们仍然单独执行:&

  1. 首先set /p a=b运行命令,显示提示符,然后读取单个输入行;
  2. 然后,输入已经读取,echo %description%正在运行,显示您的文本。

换句话说,echo不插入新行在脚本中;它告诉脚本生产输出中有一个新行,但这根本不是一回事。

(在其他脚本/编程语言中,插入新行在脚本中您可以使用\n或只是文字换行符,但 Windows 批处理脚本同样没有与之等效的功能。)

相关内容