中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关闭环境变量延迟后 变量如何使用?
作者:
标题: 关闭环境变量延迟后 变量如何使用? 上一主题 | 下一主题
lqh123108
初级用户





积分 30
发帖 24
注册 2008-10-20
状态 离线
『楼 主』:  关闭环境变量延迟后 变量如何使用?


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 ]

2008-12-30 12:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 2 楼』:  

endlocal 换 setlocal disabledelayedexpansion
详情查看 setlocal /? 帮助。

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

[ Last edited by wxcute on 2008-12-30 at 14:41 ]



┌───────┐
├→学习→实践→┤
└───────┘
2008-12-30 13:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lqh123108
初级用户





积分 30
发帖 24
注册 2008-10-20
状态 离线
『第 3 楼』:  禁用延迟的环境变量扩展与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 ]

2008-12-30 13:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 4 楼』:  2 楼写错了,不好意思。

最好是把 setlocal enabledelayedexpansion 放在 for 语句前面。
放在 for 里面而不用 endlocal 的话会出现“到达最大递归层”的错误提示。
对应指:
---------------------
setlocal
endlocal
---------------------
setlocal enabledelayedexpansion
endlocal enabledelayedexpansion
---------------------
setlocal disabledelayedexpansion
endlocal disabledelayedexpansion
---------------------
两两对应,其他类似。



┌───────┐
├→学习→实践→┤
└───────┘
2008-12-30 14:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lqh123108
初级用户





积分 30
发帖 24
注册 2008-10-20
状态 离线
『第 5 楼』:  非两两相对,肯定会导致出错吗?

再次感谢!

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

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

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

不知道我这样理解对否?

另外,我这样不对称写,为什么会出错?能逐行解释吗?

2008-12-30 18:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 6 楼』:  Re 5楼

本版搜索“到达最大递归层”

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



2008-12-31 01:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: