中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 请简化一下我的批处理 上一主题 | 下一主题
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『楼 主』:  请简化一下我的批处理

请简化一下我的批处理,要求用FOR命令,在纯DOS环境。


if exist c:\boot.ini goto c
if exist d:\boot.ini goto d
if exist e:\boot.ini goto e

...

if exist w:\boot.ini goto w


:c
set drv=c:
copy %drv%\boot.ini %drv%\boot.bak
goto end

:d
set drv=d:
copy %drv%\boot.ini %drv%\boot.bak
goto end

:e
set drv=e:
copy %drv%\boot.ini %drv%\boot.bak
goto end

...  

:w
set drv=w:
copy %drv%\boot.ini %drv%\boot.bak
goto end

:end


目的:依次查找C到W盘根目录下的BOOT.INI,将首次找到的BOOT.INI复制到同一目录下,重命名为BOOT.BAK,找到后不再查找,结束程序。

[ Last edited by gmy on 2006-1-10 at 11:31 ]



DOS之家 http://doshome.com 站长 葛明阳
2006-1-10 11:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 2 楼』:  

Re gmy:

      你的程序的改进重点不在于简化语句,而在于容错处理,因为从 C: 到 W: 很有可能碰到未放置光盘的光驱,未连接网络的网络盘以及一些特殊的USB存储设备等等,在这里使用 if exist 探测 boot.iini 的存在会遇到很多意想不到的问题。

      第三方命令 dready 的出现,解决了不少问题,本论坛已出现不少的利用它来循环检测驱动器序列的程序,可以多搜索以下过去的帖子[1]。但它不可能解决所有问题,具体讨论参见[2]。

[1]驱动器轮询遍历程序索引
9637-12-walu-驱动器轮询遍历-1
http://www.cn-dos.net/forum/viewthread.php?tid=9637

11963-9-walu-驱动器轮询遍历-2
http://www.cn-dos.net/forum/viewthread.php?tid=11963

14620-9-ramjet-驱动器轮询遍历-3
http://www.cn-dos.net/forum/viewthread.php?tid=14620

14667-9-lin8197-驱动器轮询遍历-4
http://www.cn-dos.net/forum/viewthread.php?tid=14667

15599-9-GOTOmsdos-驱动器轮询遍历-5(链接Bat)
http://www.cn-dos.net/forum/viewthread.php?tid=15599

[2]关于 HDKP 的几点技术探讨
http://www.cn-dos.net/forum/viewthread.php?tid=12892#pid95281



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-1-10 15:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bush
银牌会员




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 3 楼』:  

wil真是有心之人哪!

2006-1-11 00:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 4 楼』:  

re:willsort

谢谢。已经解决。
@echo off
set drv=1
for %%i in (c d e f g h i j k l m n o p q r s t u v w) do if exist %%i:\boot.ini set drv=%%i
if %drv%==1 goto err

:ok
cls
echo OK! %drv%\boot.ini is found !
goto end

:err
cls
echo Sorry! boot.ini is not found!
goto end

:end
echo
echo
pause
[ Last edited by gmy on 2006-1-11 at 13:40 ]



DOS之家 http://doshome.com 站长 葛明阳
2006-1-11 12:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 5 楼』:  

Re gmy:

      从你现在程序的运作方式来看,将导致始终检测从 C - W 的所有驱动器,而非一检测到匹配的驱动器盘符就立即跳出,以避免未分配的盘符及其他可能的驱动器访问问题。这是我修改后的版本,当然,它仍然无法根本解决盘符的访问问题,只是降低了出现问题的概率。
@echo off
if "%1"=="" goto ok
cls
for %%i in (c d e f g h i j k l m n o p q r s t u v w) do if exist %%i:\boot.ini %0 %%i

:err
echo Sorry! boot.ini is not found!
goto end

:ok
echo OK! %1\boot.ini is found !
goto end

:end
echo
echo
pause




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-1-11 14:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
maya0su
中级用户




积分 241
发帖 131
注册 2005-9-28
状态 离线
『第 6 楼』:  

好贴!楼主的启动盘我现在就用着呢,willsort对批处理的研究确实让我佩服!



房东说:这娃是个好孩子!
2006-1-15 00:56
查看资料  发送邮件  发短消息 网志  OICQ (55115315)  编辑帖子  回复  引用回复

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


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



论坛跳转: