无忧启动论坛

标题: if 命令有没有 else 功能? [打印本页]

作者: stevenldj    时间: 2011-5-13 16:27
标题: if 命令有没有 else 功能?
如果某个变量存在,则执行一条命令,否则执行另一条命令

if exist SomeVar DoSomething else DoAnotherthing

如果没有 else 功能,那么上面的功能该如何实现呢?

作者: chenall    时间: 2011-5-13 16:35
if xxxxx && echo 成功. ! echo 失败
作者: stevenldj    时间: 2011-5-13 16:50
原来 if 可以和 && 一起用,测试成功,谢谢 chenall
作者: pseudo    时间: 2011-5-13 19:03
注意一个细节。
if exist SomeVar DoSomething && echo 成功 ! echo 失败
在SomeVar存在时,也有显示“失败”的可能性。
作者: zxw    时间: 2011-5-13 22:00
∴应该这样:
if exist SomeVar  && DoSomething ! DoAnotherthing
作者: pseudo    时间: 2011-5-13 23:12
标题: 回复 #5 zxw 的帖子
这是不行的。还是老实点写两行吧:
if exist SomeVar DoSomething || echo -n
if not exist SomeVar DoAnotherthing || echo -n
作者: zxw    时间: 2011-5-13 23:37
标题: 回复 #6 pseudo 的帖子
想了一下,确实要老实点写两行保险一点。
因为不能保证DoSomething是否出错。

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

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

[ 本帖最后由 zxw 于 2011-5-13 23:42 编辑 ]
作者: pseudo    时间: 2011-5-14 13:46
要写成一行可以这样:
if exist SomeVar DoSomething || if not exist SomeVar DoAnotherthing || echo -n
这里假定DoSomething不会修改SomeVar。
作者: stevenldj    时间: 2011-5-15 10:48
楼上各位说的出错,是否是指脚本在遇到错误的情况下会停止执行?

以下代码在虚拟机中测试通过(保存为 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

--------------------------------------------------
作者: stevenldj    时间: 2011-5-15 11:56

直接将如下代码写入 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 功能的进一步加强!




作者: pseudo    时间: 2011-5-16 10:35
嘿嘿,想当年

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

要实现各种流程控制,日子怎么过!
作者: zxw    时间: 2011-5-16 10:43
呵呵,想当年:
0PE的程式菜单,
没有if、!、goto,
没有变量,
没有批处理,
&&及||一行还只能出现一次

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

[ 本帖最后由 zxw 于 2011-5-16 10:53 编辑 ]
作者: stevenldj    时间: 2011-5-16 11:49
P 大的 0PE 菜单中的变量,大部分还是用的内存地址,不是变量名,也没有注释,研究起来很累啊。

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


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

[ 本帖最后由 stevenldj 于 2011-5-16 11:51 编辑 ]
作者: pseudo    时间: 2011-5-16 14:30
用内存地址多是因为那时没变量可用。
现在可以简化许多,但我懒得重写了。0PE里的菜单只有历史意义。

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

总的来说,首先要有想法、目标,然后才是如何在现有条件下去实现。办法总是有的。
作者: sratlf    时间: 2011-5-16 14:47
标题: 回复 #14 pseudo 的帖子
p大谦虚了  权当练手  有空就改下0pe吧  很多人都支持的
作者: sgw888    时间: 2011-5-16 15:04
如果有时间的话,还是希望P大能把0PE的菜单重新写一下。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3