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

[数值计算] 批处理将两个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 编辑 ]

回复 6楼 的帖子

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

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

TOP

那么我想对一个变量做四则运算,然后取绝对值,然后再运算,在一个 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 编辑 ]

TOP

set /? 的帮助:

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

TOP

其实是正常的,在执行语句前会展开延迟变量。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

楼主是说两个set /a你把楼主的精髓给去掉了
菜鸟学批,一批一大批~~~~~~

TOP

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

TOP

这是什么用法啊。看不懂。。。
菜鸟学批,一批一大批~~~~~~

TOP

返回列表