中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用了两次call,变量怎么没了???
作者:
标题: 用了两次call,变量怎么没了??? 上一主题 | 下一主题
xuleicz
初级用户





积分 26
发帖 26
注册 2009-1-4
状态 离线
『楼 主』:  用了两次call,变量怎么没了???

代码如下:
@echo off

call :A
echo %M%
pause

:A
if 1==1 (
setlocal enabledelayedexpansion
set N=abc
call :B !N!
echo !M!
endlocal
goto :eof
)

:B
set M=%1
echo %M%
goto :eof
为什么前两个%M%显示出来了,第三个却是空值,大家帮忙看下,谢谢了!

[ Last edited by xuleicz on 2009-3-20 at 00:58 ]

2009-3-20 00:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xuleicz
初级用户





积分 26
发帖 26
注册 2009-1-4
状态 离线
『第 2 楼』:  

谢谢LS的,可以了,但是我的为什么不行呢,能否麻烦解释下呢?
2楼怎么没了??????

[ Last edited by xuleicz on 2009-3-20 at 01:11 ]

2009-3-20 01:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DwD
新手上路





积分 12
发帖 15
注册 2009-2-17
状态 离线
『第 3 楼』:  

@echo off

call :A
echo m1:%M%
pause

:A
if 1==1 (
setlocal enabledelayedexpansion
set N=abc
call :B !N!
echo m2:!M!
rem endlocal
goto :eof
)

:B
set M=%1
echo m3:%M%
goto :eof

OK了,我把你的endlocal rem 掉了,你把延迟变量结束掉了,还怎么返回M1那里啊。

2009-3-20 01:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xuleicz
初级用户





积分 26
发帖 26
注册 2009-1-4
状态 离线
『第 4 楼』:  

DwD,你rem掉endlocal还是不行啊,只有在开头就用setlocal才行。
似乎setlocal放在括号或标签里都不能达到要求!只能放开头?

2009-3-20 02:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: