[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
原则上不挖坟贴
但我的确是带着迷糊搜索来看到这篇文章的,理解力不行,上面的例子自己运行了还是迷糊,突然开窍,加上自己的理解,对上面的例子做了添加,来跟帖,目的是希望以后看贴的人能通过我的这个例子轻松愉快的理解这个不容易理解的问题。代码如下,须全文复制并运行来理解。
  1. @echo off
  2. echo.
  3. echo 这个需要源码和运行两者对比来理解变量和变量延迟以及什么时候用^%% 什么时候用^!
  4. echo.
  5. echo 以下代码原意是变量num的值每次都加1
  6. echo.
  7. echo 现在是没有开启变量延迟的效果
  8. echo.
  9. set /a num=0
  10. for /l %%i in (1 1 3) do (
  11.      set /a num+=1
  12.      echo %num%        这是^%%num^%% 加1没效果
  13.      echo !num!    这是!num! 没有变化
  14.      echo.
  15. )
  16. echo.
  17. echo 没有启用变量延迟,返回的结果就没有变化
  18. echo for没有把!num!当一个值来查找显示 而只是当一串字符来显示
  19. echo.
  20. echo.
  21. echo 按任意键看另一个效果  查看上下源码主体来分辨不同之处
  22. pause>nul
  23. echo.
  24. echo.
  25. echo 启用延迟变量后 循环会主动去查找num变化后的新值 并且调用来显示
  26. echo.
  27. echo 对于这样的 (数据会变化的变量)的调用 就再不能使用^%%来调用 而要用^!来调用
  28. echo.
  29. echo 因此下面的变量不能再用^%%括起来,而应该用^!括起来
  30. ping /n 5 127.1>nul
  31. echo.
  32. echo.
  33. echo.
  34. echo 下一行代码先申明启用变量延迟 启用后 以至于都不能通过特别处理来显示!num!
  35. setlocal enabledelayedexpansion
  36. echo.
  37. echo 以下代码原意是变量num的值每次都加1
  38. echo.
  39. set /a num=0
  40. for /l %%i in (1 1 3) do (
  41.      set /a num+=1
  42.      echo %num%        这是^%%num^%% 加1没效果
  43.      echo !num!        这是叹号num叹号 有变化
  44.      echo.
  45. )
  46. echo.
  47. echo 对源码的比较可见只加了一句话 声明启用了变量延迟 for就查找num的新值来显示
  48. pause>nul
复制代码
如果看到的人能轻松理解这个问题,请谢谢为论坛操劳的各位版主和坛主。
目的,学习批处理

TOP

返回列表