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

[原创] 批处理中set /a 极大的误区

关于 set /a 中极大的误区,几乎所有的批处理教材中都有这个错误,误导了至少80%的人!

这句:set /a a+=1
一切教学资料上的解释都是:与
set /a a=%a%+1
相等同!

那么我们做一个有趣的实验:
  1. @echo off
  2. set a=0
  3. for /l %%b in (1,1,5) do set /a a+=1
  4. echo a=%a%
  5. pause
复制代码
得到的输出是:
a=5
请按任意键继续. . .

那么根据教材所说的,等同于 set /a a=%a%+1 ,我们测试一下效果:
  1. @echo off
  2. set a=0
  3. for /l %%b in (1,1,5) do set /a a=%a%+1
  4. echo a=%a%
  5. pause
复制代码
得到的输出是:
a=1
请按任意键继续. . .

教材和资料都错了!
正确的解释应是:set /a a+=1 与 set /a a=a+1 对等!
多了两个%括住就造成的极大的错误!

正确对等的代码是:
@echo off
set a=0
for /l %%b in (1,1,5) do set /a a=a+1
echo a=%a%
pause


输出:
a=5
请按任意键继续. . .

当然,无聊的话下面这样写也是对等的,当然及不简便:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=0
  4. for /l %%b in (1,1,5) do set /a a=!a!+1
  5. echo a=%a%
  6. pause
复制代码
开启变量延迟,用!括住也是正确的



那么,请大家看完这篇东西之后,记住不要再犯同样的错误,同样不要再去误导他人:
set /a a+=1
不等于
set /a a=%a%+1
应等于
set /a a=a+1
2

评分人数

通常的讲,set /a a+=1正确的应该是set /a a=a+1而不是set /a a=%a%+1

实际上for这五次set /a a=%a%+1的变量设置都被延迟了

但是set /a a=a+1是set /a的一个特性,设置的变量会立即生效

所以set /a a+=1就结果来看,是立即生效的,对应的应该是set /a a=a+1

的确不关set的事,关教材资料的事

TOP

返回列表