中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教 GOTO %1 出错后怎么样处理?
作者:
标题: 请教 GOTO %1 出错后怎么样处理? 上一主题 | 下一主题
Lin7uan
初级用户





积分 38
发帖 32
注册 2010-4-7
状态 离线
『楼 主』:  请教 GOTO %1 出错后怎么样处理?

:0000 开始分析%1
IF "%1"=="" GOTO NO1
GOTO %1 2>NUL
REM ECHO %ERRORLEVEL%
:-请问一下怎么样在GOTO出错后再GOTO其它标签?

2010-4-15 23:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  

为什么要让 goto 跳错误的标签呢?
完全可以在 goto 之前就判断。
你想让批处理带参数运行,并要求这个批处理能检查参数是否为空,错误参数提示?



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-16 00:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 3 楼』:  

给你看一个示例:

双击批处理文件时,批处理执行内部N个(例如4个)功能。
双击批处理文件运行完成后,批处理窗口自动关闭。
在 CMD 控制台直接执行(不含参数)此批处理时,批处理显示选择菜单。
在 CMD 控制台执行此批处理后,CMD 控制台不关闭,并等待下一命令。
在 CMD 控制台对此批处理带参数执行,参数 Help 显示帮助信息。
在 CMD 控制台对此批处理带参数执行,参数 All 执行内部N个(例如4个)功能。
在 CMD 控制台对此批处理带参数执行,参数 About 显示版权及版本信息。  
在 CMD 控制台对此批处理带组合参数执行,每个参数对应不同内部功能。
参数要求忽略大小写,参数可以是单独字符,也可以是单词,前面可以是-或/。
当参数错误时,返回错误信息:“没有 -m 这个参数!”。
批处理每次运行完成,都显示返回标准信息:“操作已完成!”。
@echo off&setlocal enabledelayedexpansion
::传递参数必须使用空格加以分隔
set "Han0= 0 /0 -0 ? /? -h /h -help /help / "
set "Han1= 1 /1 -1 c -c /c -copy /copy "
set "Han2= 2 /2 -2 r -r /r -run /run "
set "Han3= 3 /3 -3 k -k /k -key /key "
set "Han4= 4 /4 -4 d -d /d -del /del "
set "Han5= 5 /5 -5 a -a /a -about /about "
set "Han6= 6 /6 -6 l -l /l -all /all "
set "Ye1=Han0 Han1 Han2 Han3 Han4 Han5 Han6"
if ""=="%~1" goto :Gu2

:Gu1:参数判断
if ""=="%~1" goto :Gu5
set Xing=Gu4
for %%i in (!Ye1!) do if /i "!%%i: %~1 =!" neq "!%%i!" set Xing=%%i
call :%Xing% %1
shift
goto :Gu1

:Gu2:启动检测
if "%cmdcmdline:~1,5%" == "md /c" (goto :Han6) else goto :Gu3

:Gu3:菜单选择
cls&echo 0:帮助&echo 1:功能1&echo 2:功能2&echo 3:功能3&echo 4:功能4&echo 5:版权
echo 6:全部执行功能1-4&echo 请键入相应数字以选择不同的功能:
set /p ye2=
for /l %%i in (0 1 6) do if "%ye2%" == "%%i" call :Han%%i
echo 您键入有错误,请按任意键重新开始选择...
pause>nul&goto :Gu3

:Gu4:错误
echo 没有 "%1" 这个参数!
goto :eof

:Gu5:完成
echo 操作已完成!
goto :eof

:Han0:帮助
echo 帮助信息
goto :eof

:Han1:功能1
echo 功能1执行已完成
goto :eof

:Han2:功能2
echo 功能2执行已完成
goto :eof

:Han3:功能3
echo 功能3执行已完成
goto :eof

:Han4:功能4
echo 功能1执行已完成
goto :eof

:Han5:版权
echo 寒夜孤星制作
goto :eof

:Han6:执行全部功能
for /l %%i in (1 1 4) do call :Han%%i
goto :eof




批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-16 00:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Lin7uan
初级用户





积分 38
发帖 32
注册 2010-4-7
状态 离线
『第 4 楼』:  

我的思路是,在CMD中输入
        命令名  参数1
执行步骤如下
1,检测参数1是否存在?如果存在则GOTO:参数1
2,如果参数1不存在,则GOTO:统一处理处

3楼的处理方法确实高明,很经典,学习了!!
问题是我的模块在不断增加中...
如果每个都要预先判断,程序太长,也很麻烦.
如果
        GOTO %1 || GOTO 01
能成功就好了,可GOTO失败一次就罢工了...

2010-4-16 01:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Lin7uan
初级用户





积分 38
发帖 32
注册 2010-4-7
状态 离线
『第 5 楼』:  VERY GOOD

哈哈哈哈!!!!
功夫不负有心人,终于摸出了解决方法:

          GOTO %1 || CALL %0 统一处理处

2010-4-16 23:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Lin7uan
初级用户





积分 38
发帖 32
注册 2010-4-7
状态 离线
『第 6 楼』:  不行啊,又有新问题了!

GOTO %1 2>NUL||call %0 ERR %1
运行之后没有了提示符,即“C:\>”
再用PROMPT $P$G都不行了

2010-4-17 00:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Lin7uan
初级用户





积分 38
发帖 32
注册 2010-4-7
状态 离线
『第 7 楼』:  

::试过很多次
GOTO %1 2>NUL|| ECHO=管道后面的是内部命令执行后就有提示符,否则没有!

::这个批处理在外部直接被CALL后也没提示符,但在其它批处理中CALL后则有提示符!真是奇怪。

2010-4-17 01:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by Hanyeguxing at 2010-4-16 00:28:
为什么要让 goto 跳错误的标签呢?
完全可以在 goto 之前就判断。
你想让批处理带参数运行,并要求这个批处理能检查参数是否为空,错误参数提示?

我已经说过了!
例如
@echo off
if "%1"=="" (echo.参数不存在) else (
if "%1"=="abc" (goto :abc) else goto :err
)
pause&goto:eof
:abc
echo.到这里了
pause&goto:eof
:err
echo."%1"这个参数错误
pause
或者
@echo off
if "%1"=="" (echo.参数不存在) else (
if "%1"=="abc" (goto :abc) else goto :err
if "%1"=="xyz" (goto :xyz) else goto :err
)
pause&goto:eof
:abc
echo.到这里了
pause&goto:eof
:xyz
echo.到这里了
pause&goto:eof
:err
echo."%1"这个参数错误
pause
[ Last edited by Hanyeguxing on 2010-4-17 at 01:38 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-17 01:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: