中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-02 22:41
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » call语句的问题??? 查看 2,356 回复 17
楼 主 call语句的问题??? 发表于 2006-12-01 03:02 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 141
发帖 60
注册 2006-10-28 05:54
19年会员
UID 68605
性别 男
来自 天津
状态 离线
有两个bat文件:a.bat和b.bat
在b.bat中call a.bat
现在想在call a.bat时如果a.bat发生异常就不再返回b.bat了
不知道怎么实现
2 发表于 2006-12-01 03:33 ·  中国 湖北 鄂州 电信
初级用户
积分 25
发帖 8
注册 2006-11-27 03:22
19年会员
UID 71845
性别 男
状态 离线
根据a.bat里的异常返回值判断
if level XXX=xxx exit
3 发表于 2006-12-01 04:00 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 141
发帖 60
注册 2006-10-28 05:54
19年会员
UID 68605
性别 男
来自 天津
状态 离线
判断可以做到
exit只能终止a.bat
可还是要返回到b.bat中继续执行b.bat
我的意思是如果a.bat异常就不再返回b.bat
整个程序终止也就是一旦a.bat异常就什么都不执行了
别忘了整个程序是执行b.bat 在b.bat中call a.bat
4 发表于 2006-12-01 04:34 ·  中国 浙江 杭州 电信
初级用户
积分 34
发帖 12
注册 2006-09-25 04:45
19年会员
UID 63588
性别 男
状态 离线
根据返回值来终止a.bat

goto :eof
5 发表于 2006-12-01 05:28 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 141
发帖 60
注册 2006-10-28 05:54
19年会员
UID 68605
性别 男
来自 天津
状态 离线
还是没看懂我的问题
我在a.bat异常时不仅要结束a.bat还要结束b.bat
b.bat也不执行了
goto:eof
只会结束a.bat 但还要返回b.bat继续执行剩下的程序
6 发表于 2006-12-01 06:23 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
LZ没明白 2 楼 pkone 的意思:

a.bat里发生异常,一般会有一个异常返回值,b.bat里用if level XXX=xxx exit判断该异常返回值结束运行
7 发表于 2006-12-01 06:33 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 141
发帖 60
注册 2006-10-28 05:54
19年会员
UID 68605
性别 男
来自 天津
状态 离线
其实严格讲并不是一个异常
是程序的一个分支
如果执行分支就结束所有程序
8 发表于 2006-12-01 07:17 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  b.bat中加入下面的一个语句试试:

call a.bat || goto :eof
9 发表于 2006-12-01 07:20 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 141
发帖 60
注册 2006-10-28 05:54
19年会员
UID 68605
性别 男
来自 天津
状态 离线
这样好像不行吧
call a.bat || goto :eof
这句好像是call a.bat 失败才执行goto :eof
但事实上并不是call a.bat 失败
10 发表于 2006-12-01 07:27 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  你试过了没有?

          事实胜于雄辩!
11 发表于 2006-12-01 07:36 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 141
发帖 60
注册 2006-10-28 05:54
19年会员
UID 68605
性别 男
来自 天津
状态 离线
真不行
不好意思
12 发表于 2006-12-01 07:40 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  怎么不行?把你要实现的目的和运行结果说一下。
13 发表于 2006-12-01 07:47 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 141
发帖 60
注册 2006-10-28 05:54
19年会员
UID 68605
性别 男
来自 天津
状态 离线
b.bat中call a.bat
我在a.bat脚本中做一个判断
如果状态为fail,就向log中输出“异常”
同时结束a.bat和b.bat
现在是a.bat结束但b.bat还要执行到程序结束
14 发表于 2006-12-01 08:00 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  实在听不懂你说的什么意思,两个bat能完成的,一个bat就可以完成,可以合并起来。p.s.:log 是指的什么东西啊?
15 发表于 2006-12-01 12:34 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
我也看得不太明白,这是一个 1.bat Call 2.bat 的是否正常运行了 2.bat 的测试代码:)

你可以将 2.bat 改名试试(故意制造一个错误),这个时候,1.bat就会知道2.bat运行的时候出错了,并输出相关信息……

sunyao兄可以参考原理……



运行环境: Windows CMD Shell

1.bat

@echo off

Call 2.Bat 02

:: 判断所 Call 之 2.Bat 是否运行成功,只要有预设errorlevel返回值,就是运行成功!
if %errorlevel%==1000 ( echo 2.Bat 成功执行! ) else ( echo 2.Bat 运行失败! )


2.bat

@echo off

if == exit /b
goto :%1

:01
echo 01 标签段
goto :end

:02
echo 02 标签段
goto :end

:end
exit /b 1000
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
论坛跳转: