我使用下面的 set/p
来读取用户输入
它似乎在 if block 之外工作,但在 if block 内的那个不起作用。
当我第二次运行脚本时,if block 中的用户输入会打印上一个用户输入。
测试脚本:
@echo off
set cond=true
echo %cond%
if %cond%==true (
echo "cond is true"
REM the below input doesn't work
set /p name1="enter your name"
echo name is: %name1%
)
REM it works here
set /p name2="enter your name"
echo name is: %name2%
谢谢
最佳答案
阅读帮助集
中的延迟扩展。
默认情况下,当 cmd
解析一行时,环境变量 (%foo%
) 会被扩展。在这种情况下,一行是一个语句,可以包含一个完整的括号 block 。因此,在解析一个 block 之后,所有出现的环境变量都将被替换为它的值在解析时。如果您更改 block 中的变量并在之后再次使用它,您将看到旧值,只是因为它已被替换。
延迟扩展,可以通过
启用setlocal enabledelayedexpansion
导致用感叹号而不是百分号 (!foo!
) 标记的环境变量在执行 语句之前被直接计算em> 解析。
@echo off
setlocal enabledelayedexpansion enableextensions
set cond=true
echo %cond%
if %cond%==true (
echo "cond is true"
REM the below input does work now
set /p name1="enter your name"
echo name is: !name1!
)
关于windows - 批处理脚本中的问题读取用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3025147/