Board logo

标题: [其他] 【已解决】批处理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

  1. @echo on
  2. for /l %%i in (1,1,5) do (
  3.     set var=%%i
  4.     REM 下面echo命令后面的变量进行预扩展的时候已经被替换成空,不管执行几次for循环它都是空
  5.     echo %var%
  6.     pause
  7. )
复制代码
执行这个代码看看能明白吗
作者: /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