批处理脚本中的问题读取用户输入
问题描述:
我在下面用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%
谢谢
答
在help set
阅读上延迟扩展。
默认情况下,当cmd
解析一行时,环境变量(%foo%
)被展开。在这种情况下,一行是一个单独的语句,可以包括一个完整的加括号的块。因此,在解析块之后,在解析时,所有出现的环境变量都将替换为其值。如果您在块中更改了一个变量并再次使用该变量,则会看到原来的值,因为它已被替换。
延迟扩展,其可以与标记后感叹号代替百分号(!foo!
)
原因环境变量被启用以进行执行的陈述后解析是之前直接评估。
@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!
)
您还可以使用'/ V:ON'开关启动'CMD.EXE'。 – NealB 2010-06-11 18:34:14
@neal:对于大多数不是可行的批处理文件。 – Joey 2010-06-11 18:34:57
非常感谢你...这对我来说是新的..你知道吗我可以阅读有关它的任何好资源吗? – jch 2010-06-11 18:50:30