无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4783|回复: 15
打印 上一主题 下一主题

[求助] if 命令有没有 else 功能?

[复制链接]
跳转到指定楼层
1#
发表于 2011-5-13 16:27:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果某个变量存在,则执行一条命令,否则执行另一条命令

if exist SomeVar DoSomething else DoAnotherthing

如果没有 else 功能,那么上面的功能该如何实现呢?
2#
发表于 2011-5-13 16:35:34 | 只看该作者
if xxxxx && echo 成功. ! echo 失败
回复

使用道具 举报

3#
 楼主| 发表于 2011-5-13 16:50:26 | 只看该作者
原来 if 可以和 && 一起用,测试成功,谢谢 chenall
回复

使用道具 举报

4#
发表于 2011-5-13 19:03:12 | 只看该作者
注意一个细节。
if exist SomeVar DoSomething && echo 成功 ! echo 失败
在SomeVar存在时,也有显示“失败”的可能性。
回复

使用道具 举报

5#
发表于 2011-5-13 22:00:08 | 只看该作者
∴应该这样:
if exist SomeVar  && DoSomething ! DoAnotherthing
回复

使用道具 举报

6#
发表于 2011-5-13 23:12:18 | 只看该作者

回复 #5 zxw 的帖子

这是不行的。还是老实点写两行吧:
if exist SomeVar DoSomething || echo -n
if not exist SomeVar DoAnotherthing || echo -n
回复

使用道具 举报

7#
发表于 2011-5-13 23:37:38 | 只看该作者

回复 #6 pseudo 的帖子

想了一下,确实要老实点写两行保险一点。
因为不能保证DoSomething是否出错。

事实上,即使有else命令,这样写:
if exist SomeVar DoSomething else DoAnotherthing
也不能保证DoSomething是否出错。

如果仅仅是实现else的功能,上面只一行的写法完全达到目的。

[ 本帖最后由 zxw 于 2011-5-13 23:42 编辑 ]
回复

使用道具 举报

8#
发表于 2011-5-14 13:46:27 | 只看该作者
要写成一行可以这样:
if exist SomeVar DoSomething || if not exist SomeVar DoAnotherthing || echo -n
这里假定DoSomething不会修改SomeVar。
回复

使用道具 举报

9#
 楼主| 发表于 2011-5-15 10:48:37 | 只看该作者
楼上各位说的出错,是否是指脚本在遇到错误的情况下会停止执行?

以下代码在虚拟机中测试通过(保存为 test.lst ,然后调用):

--------------------------------------------------
errorcheck on

echo errorcheck test start

set a=1
if exist a && kernel ! kernel

echo skip errorcheck successful
set a=
echo go! go! go!

pause

--------------------------------------------------
回复

使用道具 举报

10#
 楼主| 发表于 2011-5-15 11:56:31 | 只看该作者

直接将如下代码写入 grldr 中进行测试:

--------------------------------------------------
echo
errorcheck on
errorcheck status


echo ----------
set a=1
# 这里 if 判断为 true ,kernel 将被执行,但不提示出错,也不停止脚本
if exist a && kernel ! echo VarNoExist
set a=

echo ----------
set a=1
# 这里 if 判断为 false ,kernel 不被执行,直接执行 echo VarNoExist
if not exist a && kernel ! echo VarNoExist
set a=

echo ----------

set a=1
# 这里 kernel 导致判断结果为 false 从而执行 echo VarNotExist
if exist a && kernel && echo VarExist ! echo VarNoExist
set a=

echo ----------
set a=1
set b=1
# 这里 if exist a && if exist b 是整个判断条件, 结果为 true 从而执行 echo VarExist
if exist a && if exist b && echo VarExist ! echo VarNoExist
set a=

echo ----------

# 奇怪的是,出错了,脚本也继续执行,不会停止
kernel
errorcmd

echo go! go! go!
errorcheck status
pause

--------------------------------------------------

执行结果如下:

--------------------------------------------------
Error check is now on
----------
----------
VarNoExist
----------
VarNoExist
----------
VarExist
----------
Warning! No such command: errorcmd
go! go1 go!
Error check is now on

--------------------------------------------------

其实 if exist aif exist b 就是一条语句,和 kernel 差不多,控制 &&||之后的语句是否被执行
说到底,还是没有 if 语句,只有 &&||





如果 if 语句能像 DOS 中的那样就好了,可以将条件判断和执行代码分开,可以一次执行多条代码

if exist SomeVar (
DoSomething1
DoSomething2
DoSomething3
) else (
DoAnotherthing1
DoAnotherthing2
DoAnotherthing3
)

期待 GRUB4DOS 功能的进一步加强!



回复

使用道具 举报

11#
发表于 2011-5-16 10:35:04 | 只看该作者
嘿嘿,想当年

没有if、!、goto,
没有变量,
没有批处理,
&&及||一行还只能出现一次

要实现各种流程控制,日子怎么过!
回复

使用道具 举报

12#
发表于 2011-5-16 10:43:01 | 只看该作者
呵呵,想当年:
0PE的程式菜单,
没有if、!、goto,
没有变量,
没有批处理,
&&及||一行还只能出现一次

要实现各种流程控制,是怎样的艰辛!

[ 本帖最后由 zxw 于 2011-5-16 10:53 编辑 ]
回复

使用道具 举报

13#
 楼主| 发表于 2011-5-16 11:49:58 | 只看该作者
P 大的 0PE 菜单中的变量,大部分还是用的内存地址,不是变量名,也没有注释,研究起来很累啊。

语法很多用的也是老语法,if 语句很少出现,errorcheck 也没用到,看到的最多的就是:
checkrange 0x...
read 0x...
write 0x...
|| echo ...


不知 P 大可否改善一下 0PE 菜单的可读性,让我们也可以进入到 0PE 的内部世界。

[ 本帖最后由 stevenldj 于 2011-5-16 11:51 编辑 ]
回复

使用道具 举报

14#
发表于 2011-5-16 14:30:19 | 只看该作者
用内存地址多是因为那时没变量可用。
现在可以简化许多,但我懒得重写了。0PE里的菜单只有历史意义。

现在菜单、批处理方面,zwx、zhaohj、sratlf等都驾轻就熟,多看看他们的吧。
当然chenall大的不用说了。

总的来说,首先要有想法、目标,然后才是如何在现有条件下去实现。办法总是有的。
回复

使用道具 举报

15#
发表于 2011-5-16 14:47:46 | 只看该作者

回复 #14 pseudo 的帖子

p大谦虚了  权当练手  有空就改下0pe吧  很多人都支持的
回复

使用道具 举报

16#
发表于 2011-5-16 15:04:56 | 只看该作者
如果有时间的话,还是希望P大能把0PE的菜单重新写一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-29 22:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表