中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [求助]for命返回值判斷問題 上一主题 | 下一主题
BWSkyer
中级用户

我是DOS学者


积分 367
发帖 180
注册 2006-5-14
来自 重庆
状态 离线
『楼 主』:  [求助]for命返回值判斷問題

:( 想了好久都沒有想出來,才開始學習for的使用,只好找大家幫忙了.如下

for %%i in (18 20 25) do @cksum test.bat %%i (這樣是循環對比test.bat的大小)

for %%i in (good nicer bad) do xgrep %%i test.bat (循環對比test裡面的文本)

for %%i in (good nice bad) do if ?? set thing=%%i

以上三個都是單獨的語句,我沒有連接到一起,因為都需要判斷返回值才可以運行下一個batch.

如第一個,(cksum是對比大小的)當大小為20的時候,test的文本就是nice,然後我要對比裡面是不是真的nicer,因為其他的如goodr也是20了(xgrep是文本對比),如果是對的nicer的話就set thing=nicer,這樣就結束了..

可是for的返回值是最後一個的結果,我try過,所以真的很傷腦經..到底如何判斷才完美呢???

謝謝大家幫忙.



My blog:左铅右椠 上善若水
My team: 519创意团队
2007-4-20 22:42
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (309843581)  编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

没明白你要干什么。

2007-4-21 00:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
htysm
高级用户




积分 866
发帖 415
注册 2005-12-4
状态 离线
『第 3 楼』:  

连lxmxn兄都不明白,偶等就更糊涂了。



欢迎你到批处理爱好者联盟QQ群:18023953
2007-4-21 00:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
BWSkyer
中级用户

我是DOS学者


积分 367
发帖 180
注册 2006-5-14
来自 重庆
状态 离线
『第 4 楼』:  

给你们看看我没有用for写的语句

:start
(生成test.bat,其内容已限制在good,nicer,bad)
cksum /fs test.bat 20  ::判断bat档的大小,防止输入其他多余的字符
if errorlevel 1 goto other
xgrep good test.bat    ::判断里面的内容是否是我要的
if errorlevel 1 goto start
set thing=good          ::如果是我要的就set thing
goto end

:other
cksum /fs test.bat 21
if errorlevel 1 goto other1
xgrep nicer test.bat
if errorlevel 1 goto start
set thing=nicer
goto end

:other1
cksum /fs test.bat 13
if errorlevel 1 goto start
xgrep bad test.bat
if errorlevel 1 goto start
set thing=bad

:end


不知道大家明白了没有,很希望得到帮助,因为我也不知道用for可以完成吗? 都是返回值来判断下一步的。

[ Last edited by BWSkyer on 2007-4-21 at 09:22 PM ]



My blog:左铅右椠 上善若水
My team: 519创意团队
2007-4-21 05:32
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (309843581)  编辑帖子  回复  引用回复
BWSkyer
中级用户

我是DOS学者


积分 367
发帖 180
注册 2006-5-14
来自 重庆
状态 离线
『第 5 楼』:  

昨天晚上我的Notebook差点就挂了,所以没有来得及编辑帖子,今早起来就做好了,大家看看明白了没有。我顶上去了。



My blog:左铅右椠 上善若水
My team: 519创意团队
2007-4-21 21:23
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (309843581)  编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  

用这个形式试试:

Command1 && Command2 || Command3

注释:如果Command1运行成功(返回值是0),则运行Command2,如果运行失败(返回值大于0),就运行Command3。

2007-4-22 04:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
BWSkyer
中级用户

我是DOS学者


积分 367
发帖 180
注册 2006-5-14
来自 重庆
状态 离线
『第 7 楼』:  

lxmxn兄,怎么想都写不出这个for。。。参数我设置不出来,不知道设置那个?因为我这里会比较6个值啊。用 command1 && command2 || command3 无法判断值,还有我不说说过for是按最后一个结果来算的返回值吗?

运行成功(返回值是0),这里我我要解释,xgrep是当发现对比的参数正确的时候返回1,所以是里面的软件自己设置返回值,可能错了返回0也有可能的哦。



My blog:左铅右椠 上善若水
My team: 519创意团队
2007-4-22 10:21
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (309843581)  编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  

Re BWSkyer:

要判断这么多的返回值,用for命令当然不成。可惜的是,我到现在还没有明白你这个批处理要实现什么样的功能,尤其是几个外部工具的使用不熟悉,所以只能是作罢。

提醒一点的是:

if errorlevel 1 command1 的意思是:如果上一个命令的返回值大于等于1,则运行command1。希望对你有帮助,你多试试,相信你可以成功的。

2007-4-22 12:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
BWSkyer
中级用户

我是DOS学者


积分 367
发帖 180
注册 2006-5-14
来自 重庆
状态 离线
『第 9 楼』:  

看来FOR对返回值的处理还有一定的增强,我会再多试试,如果成功了一定告诉大家结果,谢谢lxmxn兄~~~



My blog:左铅右椠 上善若水
My team: 519创意团队
2007-4-23 10:47
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (309843581)  编辑帖子  回复  引用回复

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


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



论坛跳转: