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

问题描述 投票:0回答:2

如何让代码要求用户输入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
file batch-file cmd command prompt
2个回答
0
投票

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

@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由于百分号符号导致双引号无法正确读取。


0
投票
@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的信息。

© www.soinside.com 2019 - 2024. All rights reserved.