标题: [其他] 批处理set相同意义的计数代码为何出现不同的结果? [打印本页]
作者: summerflower 时间: 2010-1-24 09:51 标题: 批处理set相同意义的计数代码为何出现不同的结果?
- @echo off
- if not defined cnt (
- set cnt=1
- ) else (
- set /a cnt+=1
- )
- echo 你是第%cnt%次使用本软件
复制代码
- @echo off
- setlocal enabledelayedexpansion
- if not defined cnt(
- set cnt=1
- echo 你是第1次使用本软件
- ) else (
- set /a cnt+=1
- echo 你是第!cnt!次使用本软件
- )
复制代码
照理,正常的情况下,上面两个程序的执行结果应该都是一样的。但事实却出人意料
第一段程序能够正常运行,每多运行一次,它都会报出正确的结果,从1到2,3,4,……
第二段程序却永远停留在“你是第1次使用本软件”上,一查,set cnt,显示cnt未定义
如果说set只能在一个批处理内起作用的话,那么为什么第一段程序为什么又能正确执行?
也许你会说set并不能正确计算出程序运行的次数,这个我也知道,一关DOS窗口,又重新开始计数。但我现在更像知道的是,这两段意义一样的代码,为什么却运行出了不同结果?
作者: slore 时间: 2010-1-24 10:18
d:\slorelee\桌面>setlocal /?
开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文件。要还原原先的设置,必须执
行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个
尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。
区别多了setlocal。
变量就限脚本内部了。
你先执行第一个,再执行第二个。。。就能。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |