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

[数值计算] [讨论]批处理set /a语句报错“此时不应有……”的原因?

[复制链接]
发表于 2011-6-10 15:54:01 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-16 09:37 编辑

set /a 进行数值计算是一个非常实用的指令,特别在FOR内可以不用开启变量延时非常强大
  1. set a=0
  2. set b=0
  3. for /l %%1 in (1,1,5) do set /a a=((b+=a)+%%1)*5 &set /a a+=1
  4. echo %a% %b%
  5. pause>nul
复制代码
从上面这几句中就可以看出set /a的强大
但是在相同效果的另一句中却出现了异外!
执行下面这段代码!问题出现了!为什么?
  1. set a=0
  2. set b=0
  3. for /l %%1 in (1,1,5) do (
  4.         set /a a=((b+=a)+%%1)*5
  5.         set /a a+=1
  6.         )
  7. echo %a% %b%
  8. pause>nul
复制代码
提示:此处不应有 +%1)*5
是因为+%1的问题吗?
  1. set a=0
  2. set b=0
  3. for /l %%1 in (1,1,5) do (
  4.         set /a a=((b+=a)+a)*5
  5.         set /a a+=1
  6.         )
  7. echo %a% %b%
  8. pause>nul
复制代码
结果还是:此处不应有 +a)*5
再改:
  1. set a=0
  2. set b=0
  3. for /l %%1 in (1,1,5) do (
  4.         set /a a=((b+=a^)+%%1^)*5
  5.         set /a a+=1
  6.         )
  7. echo %a% %b%
  8. pause>nul
复制代码
通过!原来是后)要转义,
改成  set/a "a=((b+=a)+%%1)*5"  也通过!
那么是FOR闯的祸吗?
  1. set a=0
  2. set b=0
  3. (
  4. set /a a=((b+=a)+a)*5
  5. set /a a+=1
  6. )
  7. echo %a% %b%
  8. pause>nul
复制代码
结果还是一样!
那么为什么转入字块后 SET /A 就出错呢?
大家一起来说说!
 楼主| 发表于 2011-6-10 15:58:32 | 显示全部楼层
本帖最后由 mxxcgzxxx 于 2011-6-10 17:35 编辑

我想是不是因为第一个")"与字块的"("进行了匹配所以出错了?
有没有相关的教程说明?
特别做了一个测试:
  1. @echo off
  2. set a=1
  3. set b=1
  4. for /l %%1 in (1,1,5) do (
  5.       echo %a% %b%
  6.       set /a a=(b+=a)
  7.       set /a a+=1
  8.       echo %a% %b%
  9.       )

  10. pause>nul
复制代码
虽然一直提示:括弧不对称,却正确执行了
从结果可以看出,确实是与字块的"("进行了匹配!

a.JPG
前一个 echo %a% %b% 由于没开变量延时所以只显示1
而后一个echo %a% %b% 是在字块外了,显示了正确值,而且只运行了一次不在循环内!
发表于 2011-6-10 16:34:08 | 显示全部楼层
是不是第二个等号引起的
 楼主| 发表于 2011-6-10 17:34:19 | 显示全部楼层
是不是第二个等号引起的
applba 发表于 2011-6-10 16:34
  1. @echo off
  2. set a=1
  3. set b=1
  4. for /l %%1 in (1,1,5) do (
  5.       echo %a% %b%
  6.       set /a a=((b+a)+a)*5
  7.       set /a a+=1
  8.       echo %a% %b%
  9.       )

  10. pause>nul
复制代码
依然出错:此处不应有 +a)*5
发表于 2012-9-11 09:45:59 | 显示全部楼层
set /a中的括号跟前面的括号配对了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 09:14 , Processed in 0.037509 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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