![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 14:07 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 关于setlocal 最大递归层 |
| 可打印版本 4,770 / 5 |
| 第1楼 220110 | 发表于 2006-06-17 20:40 |
| 荣誉版主 发帖 313 积分 718 | |
|
关于setlocal 最大递归层 我尝试用三级for 循环来迭代,运行过程不断"骂":"已经达到最大的 setlocal 递归层。"这是什么意思?最大有多大?
注:---我们称编译错误或运行错误的警告为"骂". |
|
| 第2楼 willsort | 发表于 2006-06-18 18:17 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re 220110:
最好把源码贴出来以供分析,初步猜测是将 setlocal 写在 for 内部,而没有对应的endlocal。 |
|
| 第3楼 bagpipe | 发表于 2006-06-19 17:13 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
SETLOCAL是有递归层的限制,如果你重复启用和停用延缓环境变量的选项就会产生递归层出错的问题,具体问题还待解决!!!!!!!!!
|
|
| 第4楼 220110 | 发表于 2006-06-20 13:03 |
| 荣誉版主 发帖 313 积分 718 | |
|
说明一下,我的代码一般是这样格式:
我不把setlocal ,endlocal 写到代码里面的;也没启用什么变量延时,只是开扩展功能. 原来的问题代码已被删改过了,现在已写不回原来,所以没办法贴上来. |
|
| 第5楼 willsort | 发表于 2006-06-20 14:11 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re 220110:
测试证明setlocal的最大递归层数为32。 事实上,我们很少需要在代码内部频繁setlocal或者开关变量延迟和命令扩展,我通常在需要变量延迟时直接使用 @echo off & setlocal EnableDelayedExpansion 。 如果确需在for中使用setlocal,那么切记在同一层for内使用相对应的endlocal结束setlocal的影响。 你的问题既然不是setlocal写在for中,则可能是出在多次goto到含有 setlocal 的标签段了;但既然问题无法重现,这些就只能是猜测了。 [ Last edited by willsort on 2006-6-20 at 14:21 ] |
|
| 第6楼 mtiankong | 发表于 2007-05-25 22:56 |
| 初级用户 发帖 38 积分 70 | |
|
:: SetlocalMaxRecursion.cmd - Test of max recursion of setlocal
:: Will Sort - 2006-06-20 - CMD@WinXP @echo off for /l %%i in (1,1,100) do ( setlocal EnableDelayedExpansion rem echo.%errorlevel% set var=%%i echo counter:%%i-!var! if "!var:~-1!"=="0" pause endlocal rem 使用rem注释endlocal可以测得setlocal的最大递归层数为32 rem 这里的注释标记不能使用::,否则可能会产生语法错误 echo counter:%%i-!var! rem endlocal也关闭最近的setlocal所设定的变量延迟或者命令扩展 ) 我在XP下测试 一直到100 不明白。。。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |