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

标签 windows batch-file cmd user-input

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

相关文章:

c++ - 在qt中使用窗口消息

batch-file - 批处理文件以删除早于指定日期的文件

batch-file - 如果批量使用GTR/LSS运算符

java - Ant 在前台使用 CMD 启动 Java

python - Maya 忽略我的双引号

c++ - 使用 C/C++ 检查 Windows 中的软件安装和安装目录

c++ - 如何将字符串流中的数据打印到文件中?

windows - 如何在 Windows 命令行中创建一个空的 .html 和 .js 文件?

windows - Windows 2000 及更高版本上的 DOS 选择批处理命令(默认和超时)

windows - Windows 命令中的 "2>&1"有什么作用?