接受“作为.BAT文件中用户的输入?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接受“作为.BAT文件中用户的输入?相关的知识,希望对你有一定的参考价值。

如何让代码要求用户输入cd "folder one"然后在他们正确输入测试后接受他们的输入并转到标签:2

@echo off

:BEGIN
echo cd "folder one" = navigates user to folder 1.
set /p input=Insert Word:
if /i "%input%"=="cd "folder on""  goto 2
if /i not "%input%"=="cd "folder one"" & goto BEGIN
echo.

:2
echo you did it!
timeout /t 05
exit
答案

刚刚发现;你需要逃避内部双引号。你可以试试:

@echo off
setlocal EnableDelayedExpansion

:BEGIN
echo cd "folder one" = navigates user to folder 1.
set /p input=Insert Word: 
set input1=cd "folder one"
if /I !input! == !input1! (goto 2) else (goto BEGIN)
echo.

:2
echo you did it^^!
timeout /t 5
exit

在这里使用DelayedExpansion由于百分号符号导致双引号无法正确读取。

另一答案
@echo off
setlocal enabledelayedexpansion

:BEGIN
echo cd "folder one" = navigates user to folder 1.
set "item1=cd "folder one""
set /p "input=Insert Word: "
if /i "!input!" == "!item1!" (goto 2) else goto BEGIN

:2
echo you did it^^!
timeout /t 05
exit /b

变量的延迟扩展可以帮助处理这些情况,因为预扩展变量在执行之前会逐字扩展到源中。延迟扩展将值存储在内存中,并在执行时直接比较值。

为了确保正确比较,双方可能需要延迟扩展以避免双引号等特殊字符。双方可能不需要外部双引号,因为它不会遇到预扩展变量的文字语法错误问题。我选择添加外部双引号。

如果在展开时使用预扩展变量(可能包含exclaimation标记),则可能需要禁用延迟扩展,并在此之后启用扩展延迟扩展变量。

查看setlocal /?关于使用enabledelayedexpansiondisabledelayedexpansion的信息。

以上是关于接受“作为.BAT文件中用户的输入?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:不接受某些 Android 许可证。不能接受许可

vs函数不接受一个参数是啥问题呢

为啥 Flux.zip 接受预定义函数而不接受匿名函数?

Safari 不接受 Cookie 而 FF 和 IE 接受

406 Spring MVC Json,根据请求“接受”标头不可接受

为啥 evbuffer_add_printf 只接受静态变量而不接受“动态”变量?