中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [讨论]findcd能否再進一步? 上一主题 | 下一主题
死性不改
中级用户




积分 378
发帖 88
注册 2004-5-5
状态 离线
『楼 主』:  [讨论]findcd能否再進一步?

提議:不知道findcd.exe能否再進一步?我覺得沒有準備好的cdrom應該過濾掉,
即findcd只給準備好的cdrom分配cdrom1,cdrom2、、、、等變量。還有就是,
可否給查找到的第一個光驅(含未準備好的光驅)前面的盤分配一個變量。這樣就
更方便了。^_^

[此贴子已经被作者于2004-11-23 22:39:26编辑过]






www.51ct.net
2004-11-22 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 2 楼』:  

首先說一下,微软的那个FINDRAMD等程序确实没有什么用,而且它们其实只是查磁盘卷标的,根本不是真正的磁盘类型判断工具,经常会造成一些问题,而且如果用调用SETRAMD的那种做法来判断光驱的话只能在存在内存虚拟盘,而且内存虚拟盘的盘符正好在光驱盘符的后面的情况下才可能有效,即有很多限制,否则根本就无法判断光驱的盘符。如果是放在AUTOEXEC.BAT中,其实上面那些內容还是挺复杂的,除了上面的代码以外,一開始就要調用SETRAMD.BAT和FINDRAMD等程序來找第一個光驅盤符,然後再來循環調用上面寫到的FINDCDR程序用後推的方法來判斷是哪個光驅,整體上比較復雜繁瑣,且還會影響運行效率和速度。說明一下,我总觉得微软“发明”的从27和Z依次数一直数到3和C是比较笨的办法(顺便提一下,这种写法是编程中的大忌)。如果用我編的FINDCD判斷起來其實是非常簡單的,這樣你將上面的:
set LglDrv=27 * 26 Z 25 Y 24 X 23 W 22 V 21 U 20 T 19 S 18 R 17 Q 16 P 15
set LglDrv=%LglDrv% O 14 N 13 M 12 L 11 K 10 J 9 I 8 H 7 G 6 F 5 E 4 D 3 C
call setramd.bat %LglDrv%等等部分,以及微軟的SETRAMD.BAT、FINDRAMD等都可以全部刪掉,改成調用FINDCD就可以直接找到第一個光盤的盤符了。總之,如果你認為通過FINDCD的/S參數的方法比上面的FINDCDR.BAT在多光驅時判斷某個特定光驅起來要復雜些(不過,我個人覺得其實是差不多的,即也並不見得複雜,可能是每個人的習慣不同吧),那直接用不帶參數的FINDCD代替微軟的那種笨辦法來查找第一個光驅,再用你上面的FINDCDR來向後推盤符來判斷某個特定光驅就可以了,這樣整個程序就更加優化了。如果以上有不足之處,歡迎指正。



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2004-11-23 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
死性不改
中级用户




积分 378
发帖 88
注册 2004-5-5
状态 离线
『第 3 楼』:  

原來是我沒有理解findcd.exe的用法,多謝指教。現更改如下,請繼續指導!
::config.sys
device=himem.sys /testmem:off
DEVICEHIGH=VIDE-CDD.SYS /D:mscd000
DEVICEHIGH=ASPICD.SYS /D:mscd000
files=10
buffers=10
dos=high,umb
stacks=9,256
devicehigh=ramdrive.sys /E 4096
lastdrive=z
=================================
::autoexec.bat
@ECHO OFF
LH MSCDEX.EXE /D:mscd000>nul
findcd /s>nul
call findcdr "EZBOOT\DOS.IMG" C D E F G H I J K L M N O P Q R S T U V W X Y Z
%CDROM%:
==================================
::findcdr.bat
@echo off
set file=%1
:FCDR
if "%CDROM1%"=="%2:" goto SCDR
shift
goto FCDR
:SCDR
cda %2:>nul
IF errorlevel 1 goto next
if not exist %2:\%FILE% goto next
set cdrom=%2
goto end
:next
if "%2"=="Z" goto end
shift
goto SCDR
:end

[此贴子已经被作者于2004-11-23 22:44:36编辑过]





www.51ct.net
2004-11-23 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 4 楼』:  

“我覺得沒有準備好的cdrom應該過濾掉,即findcd只給準備好的cdrom分配cdrom1,cdrom2、、、、等變量”这个其实是相当复杂的,程序本身是用PASCAL语言写的,而这种判断还必须要用PASCAL调用ASM(汇编语言)的方法来完成。我现在都已经好久没有用这个编了,所以目前要实现这个确实很困难的,抱歉了。。其实用DREADY或CDA来判断所有的光盘盘符中未准备好的光驱是很容易的,尤其是用批处理文件+DREADY/CDA的方法判断起来应该比用ASM语言的方法简单多了,而且也更灵活些。“還有就是,可否給查找到的第一個光驅(含未準備好的光驅)前面的盤分配一個變量。這樣就更方便了”嗯,这个倒是不太难做到的,不过今天正好比较忙,我明天就加入这个功能吧。



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2004-11-27 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 5 楼』:  

OK,刚才给FINDCD增加了一个选项/L,用于显示和设置第一个光驱前的盘符给%CDROM%,试试看吧:

打开附件

例如,假设光驱为D:
FINDCD /L
CDROM=C:



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2004-11-28 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: