标题: [其他] 【已解决】批处理for中set定义的变量为什么无法输出变量值 [打印本页]
作者: qw20071217 时间: 2018-4-9 15:34 标题: 【已解决】批处理for中set定义的变量为什么无法输出变量值
本帖最后由 qw20071217 于 2018-4-9 20:26 编辑
批处理for中不能set的问题
@echo off
for /l %%i in (1,1,5) do (set
set var=%%i
echo %var%)
pause
知道要用延迟,但是我有疑问就是,for循环是按照一句来执行的,在预编译的时候,var被赋予了空值,导致第一次执行该语句时显示出“Echo处于关闭状态”,但是,执行该语句时,也执行了set var=%%i,在环境变量中,var成了1,那为什么在第二次for循环中,var已经有值,但它依旧被赋予空值呢?
作者: yhcfsr 时间: 2018-4-9 15:58
本帖最后由 yhcfsr 于 2018-4-9 16:03 编辑
由此可知,无论for循环多少次,整个for只是一个完整句子。
只有for语句结束后,for循环对变量的更改才能生效。
有理由相信,变量延迟就是为for而生。
作者: ShowCode 时间: 2018-4-9 19:17
- @echo on
- for /l %%i in (1,1,5) do (
- set var=%%i
- REM 下面echo命令后面的变量进行预扩展的时候已经被替换成空,不管执行几次for循环它都是空
- echo %var%
- pause
- )
复制代码
执行这个代码看看能明白吗
作者: /zhqsystem/zhq 时间: 2018-4-9 19:25
可以不用延迟,但后边的要在子调用中处理
不开延迟变量跟随复式前的变量值加载,不依据for,for属于复式加载,执行的不是某一条是一个整体
不只是for受此限制所有赋值都会受限制只有退出去才会被最新的赋值替换
set n=1
set n=0&&echo,%n%
echo,%n%
神奇的set
作者: qw20071217 时间: 2018-4-9 20:04
回复 3# ShowCode
谢谢!完全懂了!
作者: qw20071217 时间: 2018-4-9 20:06
回复 4# /zhqsystem/zhq
谢谢!受教了!
作者: qw20071217 时间: 2018-4-9 20:07
回复 2# yhcfsr
嗯嗯!谢谢你!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |