在 if 语句中无法在批处理文件中接受用户输入



我想在批处理文件中从用户那里获取输入,但是当我在 if 语句之外时它工作正常,但当我进入内部时,它不会获取用户的输入。

@echo off
set /p flag=Enter letter 'y': 
echo %flag%
if %flag% == y (
    set /p flag2=Enter random string:
    echo flag2: %flag2%
)
pause

上面的示例中,在我为第一个提示输入"y"之后,它打印了 %flag% 的内容,但在 if 语句内的第二个提示符中,%flag2% 没有获得任何值。

输出:

Enter letter 'y': y
y
Enter random string:lalala
flag2:
Press any key to continue . . .

为什么会这样?

在块语句(a parenthesised series of statements)中,整个块被解析然后执行。块内的任何%var%都将在解析块时(在执行块之前)替换为该变量的值,同样的事情适用于FOR ... DO (block)

因此,IF (something) else (somethingelse)将在遇到IF时使用 %variables% 的值执行。

克服此问题的两种常见方法是 1) 使用 setlocal enabledelayedexpansion 并使用 !var! 代替 %var% 来访问更改的值 var 或 2) 调用子例程以使用更改的值执行进一步处理。

因此,请注意使用 CALL ECHO %%var%% 来显示更改的值 varCALL ECHO %%errorlevel%%显示,但遗憾的是,然后重置错误级别。

尝试

CALL echo flag2: %%flag2%%
您需要

IF语句的顶部或上方添加此行:

SETLOCAL ENABLEDELAYEDEXPANSION

然后将%flag2%更改为!flag2!

相关内容

  • 没有找到相关文章

最新更新