...
if %i==2% (
set/p a=
echo %a%
)
...
echo a语句是为了输出本次读取的a的值,结果可以看到每次读取的a的值都是上次的输入的,而不是本次输入的,比如上次输入的值是1,本次输入的值是2,则本次set/p a= 读取的a的值是1,而不是2!
解决:
开启变量延迟。在文件开头加上setlocal enabledelayedexpansion,并且变量用叹号!替换百分号%括起来。比如在上面的例子中使用a变量时不能再用echo %a%,而是echo !a!
参考:
DOS:变量延迟详解(新手推荐)
批处理命令set/p var写在if里面为什么取不到本次输入的var的值,只能取到上一次运行cmd时运行的值
本文详细介绍了DOS批处理中遇到的变量延迟问题,即在if语句内使用set/p命令无法获取当前输入值,只能获取上一次的值。为了解决这个问题,文章提出了启用变量延迟的方法,在文件开头添加setlocal enabledelayedexpansion,并将变量引用改为!符号。通过这种方式,可以确保在批处理脚本中正确地读取和更新变量的最新值,避免了值的错误传递。

2058

被折叠的 条评论
为什么被折叠?



