![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-13 01:16 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS学习入门 & 精彩文章 (教学室) » 一个批处理问题?谢谢 |
| 可打印版本 623 / 2 |
| 第1楼 sizzling | 发表于 2003-12-09 00:00 |
| 初级用户 发帖 6 积分 130 | |
|
一个批处理问题?谢谢 请教一下:
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之后也有一个*呢? 谢谢 |
|
| 第2楼 willsort | 发表于 2003-12-10 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
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 |
|
| 第3楼 sizzling | 发表于 2003-12-10 00:00 |
| 初级用户 发帖 6 积分 130 | |
|
谢谢willsort 朋友的指点!
现在终于想通了 主要是本人忽略:当在%1为空时的情况!哈哈 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |