中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 一个批处理问题?谢谢 上一主题 | 下一主题
sizzling
初级用户




积分 130
发帖 6
注册 2003-10-5
状态 离线
『楼 主』:  一个批处理问题?谢谢

请教一下:
win98启动盘里面的SETRAMD.BAT的问题:
:loop
if errorlevel %1 goto no_shift

:do_shift
set cdrom=%2
shift
shift
if not %1*==* goto loop
goto no_ramdrive

:no_shift
set ramd=%2

里面的 %1*==* 这一句应该怎样来理解呢?
为什么在%1之后也有一个*呢?

谢谢


2003-12-9 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 2 楼』:  

Re sizzling:

    这是为了避免参数为空时出现语法错误而出现的防御性技巧。

    就上例来说,如果IF一句改为
       if not %1== goto loop
    是不符合语法规范的,因为DOS的命令解释器要求,==前后必须紧跟一个非空的字符串参数。也就是说,在批处理中,没有空串的概念,所以我们需要做一些折衷处理:
        if not %1*==* goto loop
    这样,在%1为空时,上句被替换为
        if not *==* goto loop
    条件成立,执行跳转,否则不成立,继续执行下一语句。

    另外,*不是防御性设计的唯一可用字符,完全可以用其他任意字符或字符串来代替,只要保持==前后的一致性即可。很多高级语言的编程者习惯以下的格式:
        if not ''%1''=='''' goto loop
    或者
        if not "%1"=="" goto loop






[此贴子已经被作者于2003-12-10 10:34:17编辑过]






※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2003-12-10 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sizzling
初级用户




积分 130
发帖 6
注册 2003-10-5
状态 离线
『第 3 楼』:  

谢谢willsort 朋友的指点!
现在终于想通了
主要是本人忽略:当在%1为空时的情况!哈哈

2003-12-10 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: