[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 【已解决】批处理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已经有值,但它依旧被赋予空值呢?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 2# yhcfsr


    嗯嗯!谢谢你!

TOP

回复 4# /zhqsystem/zhq


    谢谢!受教了!

TOP

回复 3# ShowCode


    谢谢!完全懂了!

TOP

可以不用延迟,但后边的要在子调用中处理
不开延迟变量跟随复式前的变量值加载,不依据for,for属于复式加载,执行的不是某一条是一个整体
不只是for受此限制所有赋值都会受限制只有退出去才会被最新的赋值替换
set n=1
set n=0&&echo,%n%
echo,%n%
神奇的set
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

  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. )
复制代码
执行这个代码看看能明白吗
1

评分人数

测试代码之前请做好备份

TOP

本帖最后由 yhcfsr 于 2018-4-9 16:03 编辑

由此可知,无论for循环多少次,整个for只是一个完整句子。
只有for语句结束后,for循环对变量的更改才能生效。
有理由相信,变量延迟就是为for而生。

TOP

返回列表