![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 23:58 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [寻求完善]一个判断光驱的新办法 |
| 可打印版本 2,807 / 17 |
| 第1楼 quya | 发表于 2008-05-26 19:04 |
| 高级用户 发帖 172 积分 558 来自 江苏 | |
|
[寻求完善]一个判断光驱的新办法 问题是这样引起的。
看见别人写了个判断 光盘的例子 for %%i in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do if exist %%i\WIN51 set CDROM=%%i 上边的方法很简单, 但有个问题,就是当光驱中没有光盘的时候,会弹出错误信息,然后后边的命令就无法执行, 更糟糕的是, 如果有双光驱, 光盘在第2个光驱的时候, 根本就无法得到结果, 因为第一个光驱读不出, 第2个光驱无法检测。 于是我利用 Dready 这个小程序, 这个小程序用法是 Dready /w, 返回 errorlevel 0,1,2,255, 如果返回1, 表示是 Readonly, 也就是表示这个是光驱, 并且准备好了。 我改了下程序 for %%i in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do Dready %%i &if errorlevel 1 echo %%i>>cdrom.txt 我的设想是先检测出可读的光驱到临时文件中,然后再次用 For 命令检测光驱中文件 WIN51, 第2步 很容易编, 问题就出在上边的第一步。 cdrom.txt 文件的结果不是我希望的, 因为errorlevel 的值一直是检测最后一个光驱的值, 我想这就是延迟变量的问题。 于是我在程序中 加入 setlocal ENABLEDELAYEDEXPANSION 并使用 !errorlevel! 代替 %errorlevel %, 但实际发现 !errorlevel!不是一个数值, 而是 !errorlevel!本身 最后我简单编了个 程序如下: setlocal ENABLEDELAYEDEXPANSION set test="No problem" echo !test! 实际运行结果不是 No probelm, 而是 !test!, 这是怎么回事?? 我照抄例子的时候是对的, 我自己编却错,而且也不是 !全角半角的问题,这点知识我还是有的。 我为了避免错误, 很多句子是拷贝的, 只是 set=xxx 的自己写, 可是就是错误, 我想不通了。 请大家帮帮我, 谢谢! [ Last edited by quya on 2008-5-29 at 12:41 PM ] |
|
| 第2楼 HAT | 发表于 2008-05-26 19:10 |
| 版主 发帖 5,017 积分 9,023 | |
|
把你的完整代码贴出来看看
|
|
| 第3楼 26933062 | 发表于 2008-05-26 19:19 |
| 银牌会员 发帖 879 积分 2,268 | |
|
看看这个适合你不。
[ Last edited by 26933062 on 2008-5-26 at 07:33 PM ] |
|
| 第4楼 quya | 发表于 2008-05-26 20:07 |
| 高级用户 发帖 172 积分 558 来自 江苏 | |
|
3楼的, 你的代码好神奇, 我看不懂, 但功能确实是我需要的。
你代码很复杂, 我想学也无从学起。 估计要你解释,即使你有耐心我也不一定懂。 我只想奢望地问你一下,如果按我思路编, 应该怎么编? 因为我知道我的代码。 谢谢你!!!! |
|
| 第5楼 quya | 发表于 2008-05-26 20:17 |
| 高级用户 发帖 172 积分 558 来自 江苏 | |
|
哈哈, 有点理解你的代码了, 因为 fsutil 居然是个命令。
而且 fsutil fsinfo drivetype [drives] 会显示 “CD-ROM”,“固定驱动器” 之类的东西。 太感谢了, 学了一招! |
|
| 第6楼 quya | 发表于 2008-05-26 20:37 |
| 高级用户 发帖 172 积分 558 来自 江苏 | |
|
好像还是不行,我在第一个光驱中放盘, 第2个光驱无盘。成功显示信息
第2次倒过来,第2个光驱放,第一个光驱不放,就出现弹出信息。 之后又恢复到第1种情况, 还是弹出。 重复N次, 再没成功过。 不解中....... |
|
| 第7楼 bat-zw | 发表于 2008-05-26 21:22 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
楼主试试这个: [ Last edited by zw19750516 on 2008-5-26 at 10:14 PM ] |
|
| 第8楼 26933062 | 发表于 2008-05-26 22:12 |
| 银牌会员 发帖 879 积分 2,268 | |
|
:这样呢
[ Last edited by 26933062 on 2008-5-26 at 10:16 PM ] |
|
| 第9楼 quya | 发表于 2008-05-26 22:27 |
| 高级用户 发帖 172 积分 558 来自 江苏 | |
|
7 楼的程序有错误
8楼的快接近完美了, 可是有点小错。运行结果如下: 光盘是 H 盘 无光盘 光盘是 I 盘 里面有光盘 请按任意键继续. . . 光盘是 ~0,1 盘 无光盘 能把最后一个无效信息去掉就更好,我也正在研究,何处会发生这个小错。 再次感谢! 8楼构思巧妙, 用dir 无光盘光驱只会显示“设备未就绪”(不会弹错误信息), 比那个判断 if exist 文件的句子要强太多!!! 晕! 为什么大家只想到了后者? [ Last edited by quya on 2008-5-26 at 10:32 PM ] |
|
| 第10楼 26933062 | 发表于 2008-05-26 22:33 |
| 银牌会员 发帖 879 积分 2,268 | |
|
这个错误信息是在 请按任意键继续. . . 之后出现的吗?
如果是,你确定你是完全复制8楼的代码的吗?那后面是有exit的啊!!~~~ |
|
| 第11楼 26933062 | 发表于 2008-05-26 22:43 |
| 银牌会员 发帖 879 积分 2,268 | |
|
整理了一下
|
|
| 第12楼 quya | 发表于 2008-05-26 22:57 |
| 高级用户 发帖 172 积分 558 来自 江苏 | |
|
我因为要调试, 而且以后要用在批处理,并且还要赋值,所以不能 EXIT
dir >nul 2>nul 那个 2>nul 什么意思? 不写这个, 有信息回显。 我还试了 3>nul , 结果似乎进入一个shell了,只好 EXIT 退出,昏! 从来没看到这样的用法, “26933062” 是强人, 不佩服不行。 |
|
| 第13楼 26933062 | 发表于 2008-05-26 22:59 |
| 银牌会员 发帖 879 积分 2,268 | |
|
不能用exit就改为 goto 目标标签,
否则,再显示完后继续运行:loop下面的代码当然就会出现你9楼说的错误情况了。 或者用11楼的就可以了。 |
|
| 第14楼 quya | 发表于 2008-05-26 23:13 |
| 高级用户 发帖 172 积分 558 来自 江苏 | |
|
谢谢 26933062, 我之所以要这样一个批处理, 因为我想制作一个 多合一 的XP SP3 安装盘。
目前大多数的多合一盘是有菜单的, 我想做一个无菜单的, 可自动监测机器是否是 OEM机器,如果是,则安装OEM相应版本 (如果光盘上有相应文件), 否则装 VOL版的。 无菜单的好处是可以提高光盘启动的兼容性。 我差不多已经完成了, 其实现在要的程序在实际安装系统的中途是不会把光盘取出来的(但依旧存在双光驱的问题), 但我想可能有人会把我的部分程序拷到硬盘执行,那么就会出现错误信息,我觉得非常不爽, 这才苦思冥想要解决。 今天真是学到东西了! 在实现这个设想的过程中,我用到了一些dos命令,都是用的很笨的命令,但实现的功能在我看起来很复杂。 26933062, 你很强, 我的乱七八糟代码如果你看到恐怕会笑死。 [ Last edited by quya on 2008-5-26 at 11:16 PM ] |
|
| 第15楼 26933062 | 发表于 2008-05-26 23:33 |
| 银牌会员 发帖 879 积分 2,268 | |
|
回复 14 楼 别客气,大家相互帮助的同时,其实自己也在进步。
你夸我夸的过了,这个论坛里,高手如云,我岂敢妄谈“强”字。 好好看看这里的老帖,你会知道什么才是真正的 强 ! |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |