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

[数值计算] 批处理变量延迟扩展set命令去掉/a为何出错?

[复制链接]
发表于 2012-5-18 16:37:26 | 显示全部楼层 |阅读模式

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a b = 0
  4. for %%a in (*) do (
  5. set /a b=b+1
  6. echo !b! %%a
  7. )
  8. pause
复制代码
这样能正常显示当前文件夹文件  结果如下:

但是去掉“set /a b=b+1”中的/a参数  结果如下:

不是说在变量扩展的时候b已经等于0了么  为什么去掉/a参数后会出现这个结果啊 ?
发表于 2012-5-18 17:19:38 | 显示全部楼层
set 命令只有加上开关/a命令才能进行算术计算!
做了一个小实验:
  1. @echo off
  2. set a=1+2
  3. set b=1+a
  4. set c=a+1
  5. set /a d=1+a
  6. set /a e=1+b
  7. set /a f=1+c
  8. echo %a%,%b%,%c%,%d%,%e%,%f%
  9. pause>nul
复制代码
没有加开关/a时,set将表达式赋给了变量,而没有进行运算。
即使如d、c、e的赋值,运算时也是将表达式的的第一个字符进行相关运算。
个人理解,有错误之处请指正!
 楼主| 发表于 2012-5-18 17:26:26 | 显示全部楼层
我说的不是运算的问题!
是变量延迟扩展的问题!
按照变量延迟扩展来说的话 第一列应该全是0啊  不知道为什么全是b+1!
不过还是谢谢你的回答!  呵呵!
发表于 2012-5-18 18:47:45 | 显示全部楼层
set /a b = 0
set /a b=b+1
一样吗?
发表于 2012-5-18 18:48:35 | 显示全部楼层
set b=b+1
凭什么要进行变量扩展?又不是%b%或!b!。如果扩展了才是怪事,你的cmd.exe可能被病毒替换了。
发表于 2012-5-18 22:27:40 | 显示全部楼层
回复 4# cjiabing


   感觉若表达式第一个字符不为数字,则用set /a 时默认赋值为0,所以set /a b=a+1 和 set /a b=1+a结果不一样
前者是0,后者是1
发表于 2012-5-19 01:20:57 | 显示全部楼层
回复 6# nasaer


C:\Documents and Settings\甲兵>set var=123
C:\Documents and Settings\甲兵>echo %var%
123
C:\Documents and Settings\甲兵>set var    =abc
C:\Documents and Settings\甲兵>echo %var%
123
C:\Documents and Settings\甲兵>echo %var    %
abc
发表于 2012-5-19 06:35:51 | 显示全部楼层
把你的代码中等号两边的空格全部删掉
发表于 2012-5-19 11:54:28 | 显示全部楼层
回复 1# luonanyun

2 楼 nasaer 和 5 楼 powerbat 都解释了楼主的疑问:

1. 非 set /a 形式之后, 不用 %var% 或 !var! 的 形式, 变量是不会被扩展的, 或者说不会被解释成一个变量,
而只是一个字符串 "var".
2. 无论是否 开启 变量延迟扩展, set /a 都会把 赋值等号 右边的表达式中的 非数字(0~9)开头的字符串操作数 尝试解释成 变量, 进而获取可能的值以参加数值运算;
如果 存在 变量名以数字开头的情形, 例如: 1var, 仍然可以用 %1var% 或 !1var! 的 形式获取该变量的数值参与数值运算.
3. 8 楼 gawk 所述赋值号 左右 的 空格, 在 set /a 下仍可以正常赋值, 例: set /a v=23 和 set /a v  =  23 结果是一样的.
发表于 2012-12-5 21:29:31 | 显示全部楼层
回复 9# fatcat
开启变量延迟扩展后,set /a a=b+2 这里的“b” 是被解释成 !b!还是 %b% ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 00:25 , Processed in 0.020337 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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