找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27864|回复: 6

[其他] 【已解决】批处理for中set定义的变量为什么无法输出变量值

[复制链接]
发表于 2018-4-9 15:34:54 | 显示全部楼层 |阅读模式
本帖最后由 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已经有值,但它依旧被赋予空值呢?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2018-4-9 15:58:22 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-4-9 16:03 编辑

由此可知,无论for循环多少次,整个for只是一个完整句子。
只有for语句结束后,for循环对变量的更改才能生效。
有理由相信,变量延迟就是为for而生。
发表于 2018-4-9 19:17:47 | 显示全部楼层
  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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2018-4-9 19:25:15 | 显示全部楼层
可以不用延迟,但后边的要在子调用中处理
不开延迟变量跟随复式前的变量值加载,不依据for,for属于复式加载,执行的不是某一条是一个整体
不只是for受此限制所有赋值都会受限制只有退出去才会被最新的赋值替换
set n=1
set n=0&&echo,%n%
echo,%n%
神奇的set
 楼主| 发表于 2018-4-9 20:04:11 | 显示全部楼层
回复 3# ShowCode


    谢谢!完全懂了!
 楼主| 发表于 2018-4-9 20:06:32 | 显示全部楼层
回复 4# /zhqsystem/zhq


    谢谢!受教了!
 楼主| 发表于 2018-4-9 20:07:04 | 显示全部楼层
回复 2# yhcfsr


    嗯嗯!谢谢你!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:19 , Processed in 0.020246 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表