中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-11 00:52
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关闭环境变量延迟后 变量如何使用? 查看 856 回复 5
楼 主 关闭环境变量延迟后 变量如何使用? 发表于 2008-12-30 12:51 ·  中国 浙江 嘉兴 海宁市 电信
初级用户
积分 30
发帖 24
注册 2008-10-20 16:30
17年会员
UID 128872
性别 男
状态 离线
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 ]
2 发表于 2008-12-30 13:02 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
20年会员
UID 59307
状态 离线
endlocal 换 setlocal disabledelayedexpansion
详情查看 setlocal /? 帮助。

=============================
写错,setlocal 最好是放在 for 语句外面。

[ Last edited by wxcute on 2008-12-30 at 14:41 ]
┌───────┐
├→学习→实践→┤
└───────┘
3 禁用延迟的环境变量扩展与endlocal有区别吗? 发表于 2008-12-30 13:08 ·  中国 浙江 嘉兴 海宁市 电信
初级用户
积分 30
发帖 24
注册 2008-10-20 16:30
17年会员
UID 128872
性别 男
状态 离线
多谢了

enableextension
启用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
disableextensions
禁用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
enabledelayedexpansion
启用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
disabledelayedexpansion
禁用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。

上面这几个参数,看了真的不太懂?
另外,你改成这样,不等于还是没有关闭环境变量扩展吗?
这与直接删除endlocal有什么区别吗?


呵呵,看帮助太难了,主要是没有实例呀!


[ Last edited by lqh123108 on 2008-12-30 at 13:11 ]
4 2 楼写错了,不好意思。 发表于 2008-12-30 14:45 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
20年会员
UID 59307
状态 离线
最好是把 setlocal enabledelayedexpansion 放在 for 语句前面。
放在 for 里面而不用 endlocal 的话会出现“到达最大递归层”的错误提示。
对应指:
---------------------
setlocal
endlocal
---------------------
setlocal enabledelayedexpansion
endlocal enabledelayedexpansion
---------------------
setlocal disabledelayedexpansion
endlocal disabledelayedexpansion
---------------------
两两对应,其他类似。
┌───────┐
├→学习→实践→┤
└───────┘
5 非两两相对,肯定会导致出错吗? 发表于 2008-12-30 18:27 ·  中国 浙江 嘉兴 海宁市 电信
初级用户
积分 30
发帖 24
注册 2008-10-20 16:30
17年会员
UID 128872
性别 男
状态 离线
再次感谢!

我经常看到有些程序不是这样两两相对

如我上面所写的:
...
setlocal enabledelayedexpansion
...
endlocal
)

看来是这样原因(不两两相友写法)会造成程序执行到下面后,变量出错了

不知道我这样理解对否?

另外,我这样不对称写,为什么会出错?能逐行解释吗?
6 Re 5楼 发表于 2008-12-31 01:59 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
本版搜索“到达最大递归层”

Q: 如何使用论坛的搜索功能来解决自己的问题?
A: 参考:http://www.cn-dos.net/forum/viewthread.php?tid=44122#pid308085
论坛跳转: