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

[其他] 批处理set相同意义的计数代码为何出现不同的结果?

  1. @echo off
  2. if not defined cnt (
  3.   set cnt=1
  4. ) else (
  5.   set /a cnt+=1
  6. )
  7. echo 你是第%cnt%次使用本软件
复制代码

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. if not defined cnt(
  4.   set cnt=1
  5.   echo 你是第1次使用本软件
  6. ) else (
  7.   set /a cnt+=1
  8.   echo 你是第!cnt!次使用本软件
  9. )
复制代码



照理,正常的情况下,上面两个程序的执行结果应该都是一样的。但事实却出人意料

第一段程序能够正常运行,每多运行一次,它都会报出正确的结果,从1到2,3,4,……

第二段程序却永远停留在“你是第1次使用本软件”上,一查,set cnt,显示cnt未定义

如果说set只能在一个批处理内起作用的话,那么为什么第一段程序为什么又能正确执行?

也许你会说set并不能正确计算出程序运行的次数,这个我也知道,一关DOS窗口,又重新开始计数。但我现在更像知道的是,这两段意义一样的代码,为什么却运行出了不同结果?
我是一只小菜鸟,飞到东来飞到西……

d:\slorelee\桌面>setlocal /?
开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文件。要还原原先的设置,必须执
行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个
尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。


区别多了setlocal。
变量就限脚本内部了。

你先执行第一个,再执行第二个。。。就能。

TOP

返回列表