中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-19 20:32
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]for命返回值判斷問題 查看 955 回复 8
楼 主 [求助]for命返回值判斷問題 发表于 2007-04-20 22:42 ·  中国 江苏 苏州 联通
中级用户
★★
我是DOS学者
积分 367
发帖 180
注册 2006-05-14 10:53
20年会员
UID 55507
性别 男
来自 重庆
状态 离线
:( 想了好久都沒有想出來,才開始學習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過,所以真的很傷腦經..到底如何判斷才完美呢???

謝謝大家幫忙.
2 发表于 2007-04-21 00:19 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
没明白你要干什么。
3 发表于 2007-04-21 00:22 ·  中国 安徽 芜湖 电信
高级用户
★★★
积分 866
发帖 415
注册 2005-12-04 11:19
20年会员
UID 46459
状态 离线
连lxmxn兄都不明白,偶等就更糊涂了。
欢迎你到批处理爱好者联盟QQ群:18023953
4 发表于 2007-04-21 05:32 ·  中国 江苏 苏州 联通
中级用户
★★
我是DOS学者
积分 367
发帖 180
注册 2006-05-14 10:53
20年会员
UID 55507
性别 男
来自 重庆
状态 离线
给你们看看我没有用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 ]
5 发表于 2007-04-21 21:23 ·  中国 江苏 苏州 电信
中级用户
★★
我是DOS学者
积分 367
发帖 180
注册 2006-05-14 10:53
20年会员
UID 55507
性别 男
来自 重庆
状态 离线
昨天晚上我的Notebook差点就挂了,所以没有来得及编辑帖子,今早起来就做好了,大家看看明白了没有。我顶上去了。
6 发表于 2007-04-22 04:31 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
用这个形式试试:

Command1 && Command2 || Command3

注释:如果Command1运行成功(返回值是0),则运行Command2,如果运行失败(返回值大于0),就运行Command3。
7 发表于 2007-04-22 10:21 ·  中国 江苏 苏州 电信
中级用户
★★
我是DOS学者
积分 367
发帖 180
注册 2006-05-14 10:53
20年会员
UID 55507
性别 男
来自 重庆
状态 离线
lxmxn兄,怎么想都写不出这个for。。。参数我设置不出来,不知道设置那个?因为我这里会比较6个值啊。用 command1 && command2 || command3 无法判断值,还有我不说说过for是按最后一个结果来算的返回值吗?

运行成功(返回值是0),这里我我要解释,xgrep是当发现对比的参数正确的时候返回1,所以是里面的软件自己设置返回值,可能错了返回0也有可能的哦。
8 发表于 2007-04-22 12:28 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
Re BWSkyer:

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

提醒一点的是:

if errorlevel 1 command1 的意思是:如果上一个命令的返回值大于等于1,则运行command1。希望对你有帮助,你多试试,相信你可以成功的。
9 发表于 2007-04-23 10:47 ·  中国 江苏 苏州 电信
中级用户
★★
我是DOS学者
积分 367
发帖 180
注册 2006-05-14 10:53
20年会员
UID 55507
性别 男
来自 重庆
状态 离线
看来FOR对返回值的处理还有一定的增强,我会再多试试,如果成功了一定告诉大家结果,谢谢lxmxn兄~~~
论坛跳转: