我使用下面的set /p
来阅读用户输入
它似乎在if块之外工作,但是如果块不起作用则在内部。
当我第二次运行脚本时,if块中的用户输入将打印先前的用户输入。
测试脚本:
@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%
谢谢
答案 0 :(得分:10)
了解help set
中的延迟扩展。
默认情况下,%foo%
解析一行时会扩展环境变量(cmd
)。在这种情况下,一行是一个单独的语句,可以包括一个完整的括号内的块。因此,在解析块之后,所有出现的环境变量在解析时都会被其值替换。如果更改块中的变量并再次使用它,您将看到旧值,因为它已被替换。
延迟扩展,可以使用
启用setlocal enabledelayedexpansion
导致用感叹号标记的环境变量而不是百分号(!foo!
)在执行 解析之后的语句之前直接进行评估。< / p>
@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!
)