|
BWSkyer
中级用户
   我是DOS学者
积分 367
发帖 180
注册 2006-5-14 来自 重庆
状态 离线
|
『楼 主』:
[求助]for命返回值判斷問題
使用 LLM 解释/回答一下
:( 想了好久都沒有想出來,才開始學習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 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
|
2007-4-21 00:19 |
|
|
htysm
高级用户
   
积分 866
发帖 415
注册 2005-12-4
状态 离线
|
|
2007-4-21 00:22 |
|
|
BWSkyer
中级用户
   我是DOS学者
积分 367
发帖 180
注册 2006-5-14 来自 重庆
状态 离线
|
『第 4 楼』:
使用 LLM 解释/回答一下
给你们看看我没有用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 |
|
|
BWSkyer
中级用户
   我是DOS学者
积分 367
发帖 180
注册 2006-5-14 来自 重庆
状态 离线
|
|
2007-4-21 21:23 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第 6 楼』:
使用 LLM 解释/回答一下
用这个形式试试:
Command1 && Command2 || Command3
注释:如果Command1运行成功(返回值是0),则运行Command2,如果运行失败(返回值大于0),就运行Command3。
|
|
2007-4-22 04:31 |
|
|
BWSkyer
中级用户
   我是DOS学者
积分 367
发帖 180
注册 2006-5-14 来自 重庆
状态 离线
|
『第 7 楼』:
使用 LLM 解释/回答一下
lxmxn兄,怎么想都写不出这个for。。。参数我设置不出来,不知道设置那个?因为我这里会比较6个值啊。用 command1 && command2 || command3 无法判断值,还有我不说说过for是按最后一个结果来算的返回值吗?
运行成功(返回值是0),这里我我要解释,xgrep是当发现对比的参数正确的时候返回1,所以是里面的软件自己设置返回值,可能错了返回0也有可能的哦。
|

My blog:左铅右椠 上善若水
My team: 519创意团队 |
|
2007-4-22 10:21 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第 8 楼』:
使用 LLM 解释/回答一下
Re BWSkyer:
要判断这么多的返回值,用for命令当然不成。可惜的是,我到现在还没有明白你这个批处理要实现什么样的功能,尤其是几个外部工具的使用不熟悉,所以只能是作罢。
提醒一点的是:
if errorlevel 1 command1 的意思是:如果上一个命令的返回值大于等于1,则运行command1。希望对你有帮助,你多试试,相信你可以成功的。
|
|
2007-4-22 12:28 |
|
|
BWSkyer
中级用户
   我是DOS学者
积分 367
发帖 180
注册 2006-5-14 来自 重庆
状态 离线
|
|
2007-4-23 10:47 |
|