Board logo

标题: [数值计算] 批处理将两个set /a命令合并为何产生错误? [打印本页]

作者: Fengwujiutian    时间: 2011-1-12 16:11     标题: 批处理将两个set /a命令合并为何产生错误?

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set/a a=1
  4. set/a a=!a!
  5. echo 第一次:%a%
  6. set/a a=2,a=!a!
  7. echo 第二次:%a%
  8. pause
复制代码
为什么第二次依然显示1?

[ 本帖最后由 Fengwujiutian 于 2011-1-12 18:28 编辑 ]
作者: yhcbird    时间: 2011-1-12 16:48

这是什么用法啊。看不懂。。。
作者: hucuibai    时间: 2011-1-12 16:59

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=1
  4. echo 第一次:%a%
  5. set a=2
  6. echo 第二次:!a!
  7. pause
复制代码

作者: yhcbird    时间: 2011-1-12 17:38

楼主是说两个set /a你把楼主的精髓给去掉了
作者: zqz0012005    时间: 2011-1-12 22:42

其实是正常的,在执行语句前会展开延迟变量。
作者: tmplinshi    时间: 2011-1-12 23:00

set /? 的帮助:

在表达式中的任何非数字字符串键作为环境变量
名称,这些环境变量名称的值已在使用前转换成数字。
如果指定
了一个环境变量名称,但未在当前环境中定义,那么值将被定为
零。这使您可以使用环境变量值做计算而不用键入那些 % 符号
来得到它们的值。

作者: Fengwujiutian    时间: 2011-1-12 23:02

那么我想对一个变量做四则运算,然后取绝对值,然后再运算,在一个 set /a 中就不能完成了?
例如:
  1. @echo off
  2. set /p b=
  3. set /a b=b*2-153
  4. set /a b=%b:-=%*25+64
  5. echo %b%
复制代码

[ 本帖最后由 Fengwujiutian 于 2011-1-12 23:06 编辑 ]
作者: powerbat    时间: 2011-1-12 23:40     标题: 回复 6楼 的帖子

我觉得这个解释主要是针对set /a n=var这种形式的,即变量不用%括起来的情况

5楼的解释才是一般性的。如echo !n!也是在命令执行前就要展开!n!的。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2