- @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窗口,又重新开始计数。但我现在更像知道的是,这两段意义一样的代码,为什么却运行出了不同结果? |