![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 17:23 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请大家指点一下,这个批处理那里错了 |
| 可打印版本 2,738 / 19 |
| 第16楼 willsort | 发表于 2006-05-29 19:58 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re fan927:
楼主在7楼10楼的else用法实际上是错误的。在cmd中else子句必须位于if子句的尾部之后,而尾部的标志是右圆括弧 ")",具体参见。所以,楼主的else因为直接跟随在goto label之后而被忽略,所以是无效的。 如果使用 f "%a%"=="dog" (goto dog) else goto pig 使else子句有效,则程序的流程分支将会不符合预期,即%a%不为dog即去goto pig,以后的if语句将均被忽略。 Re Wengier: if/goto样式和if/else样式的选择,实际上主要取决于个人的编写风格,比如从DOS Batch中成长的我,便喜欢使用goto样式的分支跳转,因为它具有更强的兼容性,而且这样的样式可以使我快速浏览代码中基本的分支流程,而不需要滚动和翻页。 其它的选择理由还有一些,比如我不太喜欢每行语句的长度超过80个字符,这不仅仅是DOS下文本编辑器所带来的遗留习惯,主要是它可以增加阅读代码时的休息停顿频率,以提高代码的可阅读性。毕竟在大多数情况下,几个短句总是比一个等价的长句更易于理解。当然,if/else样式也可以改成短句型式,但是这样它就不再简洁了。 引自cmd@WinXP的set命令行帮助信息
|
|
| 第17楼 Wengier | 发表于 2006-05-29 23:22 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
Willsort:
其它理由我同意,不过如说到兼容性,那也是没有办法的。如果楼主是在编写DOS批处理文件的话,那自然要用DOS的语法,而且这也是我最常用到的。但是,楼主在一开头就用到了“SET /P”这种用法,显然这是不能在DOS下运行的,因此我当时就判定他是在编写NT脚本。因此,这也就无法再顾及对DOS下的兼容性了。而对于NT脚本来说,当然最好使用NT脚本中比较简洁的方法,而且if/else与goto相比似乎不是那么容易出错(如1楼中的错误)。 |
|
| 第18楼 fan927 | 发表于 2006-05-30 02:05 |
| 初级用户 发帖 31 积分 82 | |
|
多谢大家热情回复,这次应该是彻底搞定了
@echo off :set set /p a=请输入你的名字: if "%a%"=="dog" (goto dog) else if "%a%"=="pig" (goto pig) else if "%a%"=="" (goto set) else goto err :dog echo 这是一只狗! goto end :pig echo 这是一只猪! goto end :err echo 输入错误!! goto end :end set a= goto set pause>nul |
|
| 第19楼 3742668 | 发表于 2006-05-30 12:29 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
彻底搞定了?Really?恐怕言之过早了吧。
不必说最后的end部分无法退出,最后一句pause.nul百无一用;也不必说三个标号段+if/else的结构是取二者之短,导致代码冗余度增加,可扩展性降低;单是出错处理,光靠一句else goto err是远远不够的。在set /p语句运行时,可以尝试输入以下各种字符: 1.一个引号 " 2.引号+双等号 "=="?" 事实说明:革命尚未成功,同志仍需努力。期待你能综合前几楼之长,把这个脚本真正地搞定。 |
|
| 第20楼 fan927 | 发表于 2006-05-30 15:09 |
| 初级用户 发帖 31 积分 82 | |
|
多谢3742668版主,这样我认为可以了吧,我接触批处理也就半个月左右,您的指点我还一时理解不了,以后还请多多指教!
@echo off :set set a= set /p a=请输入你的名字(可选dog,pig or end): if "%a%"=="dog" ( goto dog ) else if "%a%"=="pig" ( goto pig ) else if "%a%"=="" ( goto set ) else if "%a%"=="end" ( goto end ) else goto err :dog echo 这是一只狗! goto set :pig echo 这是一只猪! goto set :err echo 输入错误!! goto set :end pause |
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |