![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 14:46 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请问在这个批处理中为何%WHAT%的值无法正确传给其他变量? |
| 可打印版本 1,823 / 10 |
| 第1楼 sglxy | 发表于 2005-10-29 20:50 |
| 中级用户 发帖 87 积分 397 | |
|
请问在这个批处理中为何%WHAT%的值无法正确传给其他变量? 最近我写了一个批处理程序,但是每执行到这一段就不对了:
******************************* echo 你要恢复系统到哪一个分区(请输入分区号或盘符)?(123456789或DEFGHIJKL): set WHAT= what s for %%a in (D E F G H I J K L) do IF == goto _copy for %%b in (1 2 3 4 5 6 7 8 9) do IF == set HDRV=1:%%b ghost -clone,mode=pload,src=%CDROM%\sysbak.GHO:1,dst=%HDRV% -sure -rb goto to_BOOT :_copy for %%c in (C D E F G H I J K L) do IF == set HDRV=%WHAT% sys %HDRV%: copy /y a:\gho\*.*\ %HDRV% ************************************ 后来才发现变量%HDRV%中的值不对,是空的。好象是这两句有错: for %%a in (D E F G H I J K L) do IF == goto _copy for %%b in (1 2 3 4 5 6 7 8 9) do IF == set HDRV=1:%%b 请兄弟们帮我看看到底错在那里?为什么? —————————————— Edited by willsort —————————————— 原标题:请兄弟们帮我看看到这个批处理底是那里不对. 为了方便用户的浏览和版主的管理,请在帖子的标题中简要叙述其内容或意图 修改标题可点击帖子下方的"编辑"按钮,在编辑页面中修改标题后确认即可 若三日后仍未进行修改,将由版主进行修改,同时将扣除此帖作者的4点积分 —————————————— Edited by willsort —————————————— [ Last edited by sglxy on 2005-11-1 at 23:51 ] |
|
| 第2楼 sglxy | 发表于 2005-10-29 22:44 |
| 中级用户 发帖 87 积分 397 | |
|
各位版主,有在线的吗?麻烦你们给看看,先谢谢了。
|
|
| 第3楼 sglxy | 发表于 2005-10-30 19:51 |
| 中级用户 发帖 87 积分 397 | |
|
可惜,高手们都不在!
|
|
| 第4楼 JonePeng | 发表于 2005-10-30 23:06 |
| 金牌会员 发帖 1,883 积分 4,562 来自 广东广州 | |
|
试试将 [%WHAT%] 改为 [%%WHAT%%]
|
|
| 第5楼 本是 | 发表于 2005-10-31 12:03 |
| 银牌会员 发帖 790 积分 2,227 | |
|
Re sglxy:
你的what的使用方法有问题,不应该用what S,要用what C "提示信息" 字符列表,C命令会自动限制输入字符的范围,因而不用再进行IF测试,修改如下: ******************************* set WHAT= what C "你要恢复系统到哪一个分区(请输入分区号或盘符)?(123456789或DEFGHIJKL):" 123456789DEFGHIJKL for %%a in (D E F G H I J K L) do goto _copy for %%b in (1 2 3 4 5 6 7 8 9) do set HDRV=%%b ghost -clone,mode=pload,src=%CDROM%\sysbak.GHO:1,dst=1:%HDRV% -sure -rb goto to_BOOT :_copy for %%c in (C D E F G H I J K L) do set HDRV=%WHAT% sys %HDRV%: copy /y a:\gho\*.*\ %HDRV% ******************************* [ Last edited by 本是 on 2005-10-31 at 12:44 ] |
|
| 第6楼 sglxy | 发表于 2005-10-31 12:56 |
| 中级用户 发帖 87 积分 397 | |
|
谢谢"本是"兄弟的答复,但是我还有个问题,请看:
for %%a in (D E F G H I J K L) do goto _copy 如果这样改过后的语法是不是有点别扭? |
|
| 第7楼 willsort | 发表于 2005-10-31 14:16 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re sglxy & 本是:
sglxy 兄原来的代码会产生问题,应该与 %what% 变量有关,至于 what s 的使用法对错,因为早已不接触这个工具而无法置评;不过我猜测 what s 是接受字符串输入的,因此也应该能实现你的意图才对。 for %%a in (D E F G H I J K L) do IF [%%a]==[%WHAT%] goto _copy 不仅仅“限制输入字符的范围”,同时将对输入的字符进行分选,为字母则 goto _copy ,为数字则 ghost ,因此不应省略其中的 if 片断。 |
|
| 第8楼 本是 | 发表于 2005-10-31 16:36 |
| 银牌会员 发帖 790 积分 2,227 | |
|
willsort说的“
for %%a in (D E F G H I J K L) do IF == goto _copy 不仅仅“限制输入字符的范围”,同时将对输入的字符进行分选,为字母则 goto _copy ,为数字则 ghost ,因此不应省略其中的 if 片断。”很正确。 what C 命令能对输入的字符进行范围限定,S命令不行。这对本.BAT应该是非常重要的。 此处的问题大概是NT系列操作系统对环境变量的设置规则不同于WIN9X所致! [ Last edited by 本是 on 2005-10-31 at 16:38 ] |
|
| 第9楼 sglxy | 发表于 2005-10-31 18:27 |
| 中级用户 发帖 87 积分 397 | |
|
非常感谢两位高手的指点,这个批处理是我制作的隐藏分区自动恢复功能的一段,方法是先:运行gdisk显示分区信息后,然后再手工输入要对哪一个分区进行操作。而what s命令将输入键值用%WHAT%变量传到for %%a in (D E F G H I J K L) do IF == goto _copy中进行判断,如果是其中的一个则说明该分区没有被隐藏(分区隐藏后不会有盘符),我就可以对该分区安装上一些个性化的恢复功能。但是就是这个我自认为万无一失的方法偏偏得不到应有的结果,我现在不明白的是,为何for %%a in (D E F G H I J K L) do IF == goto _copy这一句判断句会不起作用,我认为其语法应该没有错啊。
另外请教一下“ 本是”老兄,在需要限定输入字符范围的情况下“what c”命令该如何书写(语法)?得到的结果是什么样的变量形式,应该如何对该变量进行操作? 请您举个例子,谢谢! [ Last edited by sglxy on 2005-10-31 at 18:38 ] |
|
| 第10楼 Archimonde | 发表于 2005-11-01 13:37 |
| 新手上路 发帖 2 积分 3 | |
|
个人有个编程习惯,就是在出错语句的前面将它调用的参数一一显示一下,不知道你尝试过没有
|
|
| 第11楼 willsort | 发表于 2005-11-02 12:55 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re sglxy:
what c 的用法 本是 兄在5楼就已给出了,最后一个参数 123456789DEFGHIJKL 即是限定其输入范围的,what 的其它用法多看其命令行帮助也应不难理解。 for %%a in (D E F G H I J K L) do IF [%%a]==[%WHAT%] goto _copy 是没有什么语法错误,但不保证没有用法错误,如果 %WHAT% 的变量值的前或后含有空格,那么你就永远无法使 if 的判断成立。所以应该根据 Archimonde 的建议,在for语句前加一句 echo what result=[%what%] 查看其输出结果是否正常。如果这个结果正常,那问题可能处在其它语句中。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |