中国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命令? 使用 LLM 解释/回答一下

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 楼』:   使用 LLM 解释/回答一下

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 楼』:   使用 LLM 解释/回答一下

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 楼』:   使用 LLM 解释/回答一下

@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 楼』:   使用 LLM 解释/回答一下

Originally posted by wudixin96 at 2007-5-31 04:06 PM:
@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 楼』:   使用 LLM 解释/回答一下

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

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


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




积分 57
发帖 23
注册 2007-4-2
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

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




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

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


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



论坛跳转: