中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: IF中能嵌套CALL命令? 上一主题 | 下一主题
linmilin
初级用户




积分 57
发帖 23
注册 2007-4-2
状态 离线
『楼 主』:  IF中能嵌套CALL命令?

IF中嵌套CALL命令,为何CALL命令不能得到正确执行。请高手指教。谢谢!
问题如下:
setlocal enabledelayedexpansion
color 0A
set targerpath=c:\temp
set fyyyymm=2007.05
:id_loop
echo.
set id=
set /p id=input the id number:
if "!id!" == "" (
        cls
        echo error - the id is null¡
        echo.
        goto id_loop
) else (
        pushd !targerpath!\!fyyyymm!
        if not exist "!id!" (
                md !id!
        ) else (
                popd
                echo the !id! exist¡
                echo.
:rade_loop
                set rade=
                set /p rade=renamedeltreeexit
                if "!rade!" == "" (
                        cls
                        echo error - select the string¡
                        pause>nul
                        goto rade_loop
                ) else (
                        call :!rade! 2>nul || call :p  REM 在这里选择e或r时,CALL命令均调用:P 的这段代码
                        pause>nul
                        goto :eof
                        :p
                                echo error - select the string!
                                goto :rade_loop
                                goto :eof
                        :e
                                echo this is exit!
                                goto :eof

                        :r
                                echo this is rename!
                                goto :eof
                )               
        )
)
[ Last edited by linmilin on 2007-5-31 at 09:33 PM ]



实用就是好东西!
2007-5-31 11:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
stornager
中级用户

scriptlover


积分 328
发帖 131
注册 2007-3-25
状态 离线
『第 2 楼』:  

call :!rade! 用法错误,应该是call:rade_loop
set /p rade=renamedeltreeexit应该改为set rade=renamedeltreeexit 吧

[ Last edited by stornager on 2007-5-31 at 03:34 PM ]



scriptlover
Be with script forever!!
2007-5-31 15:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
linmilin
初级用户




积分 57
发帖 23
注册 2007-4-2
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by stornager at 2007-5-31 03:26 PM:
call :!rade! 用法错误,应该是call:rade_loop
set /p rade=renamedeltreeexit应该改为set rade=renamedeltreeexit 吧

[ Last edited by stornager on 2007-5-31 at 03:34 PM ]

第一:
set /p rade=renamedeltreeexit
这一句是用于与用户进行互动,可以让用户选择条件。

第二:
:rade_loop
此循环是当用户选择的条件非程序设置的条件时进行跳转的。
CALL调用的是以下部分程序:
call :!rade! 2>nul || call :p  
                        pause>nul
                        goto :eof
                        :p
                                echo error - select the string!
                                goto :rade_loop
                                goto :eof
                        :e
                                echo this is exit!
                                goto :eof

                        :r
                                echo this is rename!
                                goto :eof



实用就是好东西!
2007-5-31 15:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 4 楼』:  


@echo off
:rade_loop
set rade=
set /p rade=renamedeltreeexit
                if "%rade%"=="" (
                        cls
                        echo error - select the string
                        pause>nul
                        goto rade_loop
                ) else (
                        call :%rade% 2>nul||call :p
                        pause>nul
                        goto :eof
                        :p
                                echo error - select the string!
                                goto :rade_loop
                                goto :eof
                        :e
                                echo this is exit!
                                pause>nul
                                goto :eof

                        :r
                                echo this is rename!
                                pause>nul
                                goto :eof
                )            
在偶运行看来。就call :%rade%出问题。个人认为没必要启用延迟

2007-5-31 16:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
linmilin
初级用户




积分 57
发帖 23
注册 2007-4-2
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by wudixin96 at 2007-5-31 04:06 PM:
[code]@echo off
:rade_loop
set rade=
set /p rade=renamedeltreeexit
                if "%rade%"=="" (
                        cls
                        echo error - selec ...

此程序为程序的一部分;要启用延迟.



实用就是好东西!
2007-5-31 21:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 6 楼』:  

call :!rade! 2>nul || call :p

第一call后, errorlevel变量变成1,即失败。所以会调用第二个call

2007-5-31 22:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
linmilin
初级用户




积分 57
发帖 23
注册 2007-4-2
状态 离线
『第 7 楼』:  

确实是这样,但就是找不出为什么会导致这样的问题。
从程序上说,程序是没问题的。但就是得不到想要的结果。
请不吝赐教。



实用就是好东西!
2007-6-1 08:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: