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

时间:2019-01-03 11:18:58

标签: file batch-file cmd command prompt

如何使代码要求用户输入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

2 个答案:

答案 0 :(得分: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由于百分号符号而导致双引号无法正确阅读。

答案 1 :(得分: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

延迟扩展变量可以帮助解决这些情况, 因为预展开的变量从字面上扩展为 源在执行之前。延迟扩展存储价值 在内存中,并在执行时直接比较该值。

为确保正确比较,可能需要延迟双方 扩展以避免特殊字符(例如双引号)。 双方可能不需要外部双引号,因为它不需要 遭受预扩展的字面语法错误问题 变量。我选择添加外部双引号。

如果使用,则可能需要禁用延迟扩展 展开时预展开的变量,可能包含 感叹号,并在此之后启用 延迟的扩展变量。

查看setlocal /?关于enabledelayedexpansion的使用 和disabledelayedexpansion