原则上不挖坟贴
但我的确是带着迷糊搜索来看到这篇文章的,理解力不行,上面的例子自己运行了还是迷糊,突然开窍,加上自己的理解,对上面的例子做了添加,来跟帖,目的是希望以后看贴的人能通过我的这个例子轻松愉快的理解这个不容易理解的问题。代码如下,须全文复制并运行来理解。- @echo off
- echo.
- echo 这个需要源码和运行两者对比来理解变量和变量延迟以及什么时候用^%% 什么时候用^!
- echo.
- echo 以下代码原意是变量num的值每次都加1
- echo.
- echo 现在是没有开启变量延迟的效果
- echo.
- set /a num=0
- for /l %%i in (1 1 3) do (
- set /a num+=1
- echo %num% 这是^%%num^%% 加1没效果
- echo !num! 这是!num! 没有变化
- echo.
- )
- echo.
- echo 没有启用变量延迟,返回的结果就没有变化
- echo for没有把!num!当一个值来查找显示 而只是当一串字符来显示
- echo.
- echo.
- echo 按任意键看另一个效果 查看上下源码主体来分辨不同之处
- pause>nul
- echo.
- echo.
- echo 启用延迟变量后 循环会主动去查找num变化后的新值 并且调用来显示
- echo.
- echo 对于这样的 (数据会变化的变量)的调用 就再不能使用^%%来调用 而要用^!来调用
- echo.
- echo 因此下面的变量不能再用^%%括起来,而应该用^!括起来
- ping /n 5 127.1>nul
- echo.
- echo.
- echo.
- echo 下一行代码先申明启用变量延迟 启用后 以至于都不能通过特别处理来显示!num!
- setlocal enabledelayedexpansion
- echo.
- echo 以下代码原意是变量num的值每次都加1
- echo.
- set /a num=0
- for /l %%i in (1 1 3) do (
- set /a num+=1
- echo %num% 这是^%%num^%% 加1没效果
- echo !num! 这是叹号num叹号 有变化
- echo.
- )
- echo.
- echo 对源码的比较可见只加了一句话 声明启用了变量延迟 for就查找num的新值来显示
- pause>nul
复制代码 如果看到的人能轻松理解这个问题,请谢谢为论坛操劳的各位版主和坛主。 |