中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-23 16:05
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]批处理中断问题
可打印版本  1,943 / 7
第1楼 chenhui530 发表于 2006-03-22 19:08
高级用户 发帖 273 积分 772
[求助]批处理中断问题
命令如下:
set drv=c d e f g h i j k
for %%b in (%drv%) do if exist %%b:\123.exe set s=%%b

当如果接了U盘或者磁盘上有的分区格式在DOS下无法识别时这条命令就会中断导致S值为空怎么解决这个问题
第2楼 Climbing 发表于 2006-03-23 12:13
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
我这方法可能比较笨。
1.

::main.bat
...
set drives=
for %%D 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 Call IsReady %%D
....

2.
::IsReady.BAT
@echo off
dready %1 > nul
if errorlevel 1 goto _quit
if errorlevel 0 set drives=%1 %drives%
:_quit

3.

http://nufans.net/clone/dostools/dready.com
第3楼 MIN 发表于 2006-03-23 18:36
初级用户 发帖 17 积分 58
好东西,
第4楼 chenhui530 发表于 2006-03-23 19:31
高级用户 发帖 273 积分 772
Originally posted by Climbing at 2006-3-23 12:13 PM:
我这方法可能比较笨。
1.

::main.bat
...
set drives=
for %%D 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 Call IsReady %%D
....

2.
::IsReady.B ...


谢谢Climbing的提示,一开始我想到类似的解决方法不知道有dready这个命令,是不是系统自带的如果是自带的话我现在可以解决了在你的上面修改了一下没有测试过不知道可以吗

1.

::main.bat
...
set drives=
set finddrive=
for %%D 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 Call IsReady %%D
....

2.
::IsReady.BAT
@echo off
dready %1 > nul
if errorlevel 1 goto _quit
if errorlevel 0 goto _find

:_quit
end

:_find
set drives=%1 %drives%
if exist %drives%\123.exe set finddrive=%drives%
第5楼 willsort 发表于 2006-03-23 21:25
元老会员 发帖 1,512 积分 4,432
Re chenhui530 & Climbing:

在论坛上许久不见陈兄和石头兄的踪迹了,不知近况如何?

dready.com是第三方工具,磁盘检测的批处理中经常用到,石头兄已经在2楼给出链接了。不用第三方工具的算法也有,不过相对麻烦很多,而且还不足够完善。可以参考下面的链接:

(已结)关于“硬盘杀手”批处理的讨论
http://www.cn-dos.net/forum/viewthread.php?tid=12892

如果插入U盘,使用原来的程序应该不会导致%s%为空,除非123.exe根本就不存在。而NTFS分区对于DOS是透明的,它不会被分配盘符,与%s%为空的应该也无关系,如果123.exe在NTFS分区上,那么使用dready也是无用的。

这个程序和其它类似程序的缺陷在于,当它所枚举的所有盘符中,出现了代表无软盘的软驱,无光盘的光驱或其他类似未准备设备的盘符时,将直接抛出错误退出程序,从而无法继续以下的进程。这在以上的链接中有详细讨论,而这也是dready被使用的根本原因。

[ Last edited by willsort on 2006-3-24 at 08:44 ]
第6楼 3742668 发表于 2006-03-23 23:00
荣誉版主 发帖 718 积分 2,013
像这种情况我认为用dir+find应该更有效一些:
dir %%b:\123.exe 1>nul 2>nul
然后通过errorlevel来判断是否存在%%b:\123.exe
第7楼 chenhui530 发表于 2006-03-24 20:37
高级用户 发帖 273 积分 772
re willsort
好久时间没上DOS联盟了,一个是因为这段时间比较忙有很多程序需要编写。其实自从51CT关闭后就没再看见willsort兄的踪迹了。最近在编写一个基于GHOST全自动备份还原工具的时候遇到了个奇怪的地方我在公司的电脑上只要把U盘接上就会出问题导致那条FOR语句有问题从而使一个关键变量值不对。但是奇怪的是我在自己的机器上接上U盘又没有问题。
我自己没有网站现给大家一个站点是我给他们做的一OEM作品
大家可以帮忙测试看下下载地址是:http://www.ylmf.net/downinfo/547.html
最近刚完成网络版等大家解决了给大家玩玩
第8楼 Climbing 发表于 2006-03-25 21:31
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
嗯,我最近单位的事情也比较多,很少有时间上论坛了。不过,这几天闲了一些,就到论坛来转转。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023