我有一个批处理脚本模板,其中包含一个选项,我想提出最终用户想要做什么的问题,并在问题下方提供选项描述。这是我的模板:
@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
来分隔它们并不重要;它们仍然单独执行:&
- 首先
set /p a=b
运行命令,显示提示符,然后读取单个输入行; - 然后,后输入已经读取,
echo %description%
正在运行,显示您的文本。
换句话说,echo
不插入新行在脚本中;它告诉脚本生产输出中有一个新行,但这根本不是一回事。
(在其他脚本/编程语言中,插入新行在脚本中您可以使用\n
或只是文字换行符,但 Windows 批处理脚本同样没有与之等效的功能。)