作者:lqh123108 | 时间:2008-12-30 12:51 | 标题:关闭环境变量延迟后 变量如何使用?
for /f "tokens=1 delims==页" %%a in ("总20页码第18页") do (
setlocal enabledelayedexpansion
set str=%%a
call set num=!str:总=!
echo !num!
pause
endlocal
)
echo %num%
echo !num!
pause
上面的代码中提取了 20 这个数字
我用FOR去提取,得到了数字
为什么在结束本地环境变量延迟使用后,后面的代码无法显示数字20
而总是显示:
!num!
ECHO 处于打开状态。
[
Last edited by lqh123108 on 2008-12-30 at 13:12 ]
作者:wxcute | 时间:2008-12-30 13:02
endlocal 换 setlocal disabledelayedexpansion
详情查看 setlocal /? 帮助。
=============================
写错,setlocal 最好是放在 for 语句外面。
[ Last edited by wxcute on 2008-12-30 at 14:41 ]
作者:lqh123108 | 时间:2008-12-30 13:08 | 标题:禁用延迟的环境变量扩展与endlocal有区别吗?
多谢了
enableextension
启用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
disableextensions
禁用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
enabledelayedexpansion
启用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
disabledelayedexpansion
禁用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
上面这几个参数,看了真的不太懂?
另外,你改成这样,不等于还是没有关闭环境变量扩展吗?
这与直接删除endlocal有什么区别吗?
呵呵,看帮助太难了,主要是没有实例呀!
[
Last edited by lqh123108 on 2008-12-30 at 13:11 ]
作者:wxcute | 时间:2008-12-30 14:45 | 标题:2 楼写错了,不好意思。
最好是把 setlocal enabledelayedexpansion 放在 for 语句前面。
放在 for 里面而不用 endlocal 的话会出现“到达最大递归层”的错误提示。
对应指:
---------------------
setlocal
endlocal
---------------------
setlocal enabledelayedexpansion
endlocal enabledelayedexpansion
---------------------
setlocal disabledelayedexpansion
endlocal disabledelayedexpansion
---------------------
两两对应,其他类似。
作者:lqh123108 | 时间:2008-12-30 18:27 | 标题:非两两相对,肯定会导致出错吗?
再次感谢!
我经常看到有些程序不是这样两两相对
如我上面所写的:
...
setlocal enabledelayedexpansion
...
endlocal
)
看来是这样原因(不两两相友写法)会造成程序执行到下面后,变量出错了
不知道我这样理解对否?
另外,我这样不对称写,为什么会出错?能逐行解释吗?
作者:HAT | 时间:2008-12-31 01:59 | 标题:Re 5楼