批处理脚本中的问题读取用户输入

时间:2010-06-11 18:10:07

标签: windows batch-file cmd user-input

我使用下面的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%

谢谢

1 个答案:

答案 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!
)