中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 该怎样改这段批处理? 上一主题 | 下一主题
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『楼 主』:  该怎样改这段批处理?


如下:
dready C: /w
if ERRORLEVEL 2  goto az
dready D: /w
if ERRORLEVEL 2  goto az
dready E: /w
if ERRORLEVEL 2  goto az
...
dready z: /w
if ERRORLEVEL 2  goto az

(我的意思是如果返回码是2,则执行“az”,不再dready下面的分区。)

我改成:
for %%1 in (d e f g h i j k l m n o p q r s t u v w) do dready %%1: /w
if ERRORLEVEL 2  goto az
竟然不行,该如何改呢?

2004-2-13 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Kinglion
铂金会员

痴迷DOS者


积分 5792
发帖 1921
注册 2003-6-20
来自 金獅電腦軟體工作室
状态 离线
『第 2 楼』:  

您的批处理文件里的 dready 是外部命令吧? 你可以试一试 SHIFT 命令。

:TOP
dready %1: /w
if ERRORLEVEL 2  goto az
SHIFT
GO TOP

:az

REM 此批处理启动参数为: d e f g h i j k l m n o p q r s t u v w x y z

没有具体操作,有什么不妥之处请大家指正。



熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境!
金狮電腦軟體工作室愿竭诚为您服务!
QQ群:8393170(定期清理不发言者)
个人网站:http://www.520269.cn
电子邮件:doujiehui@vip.qq.com
微信公众号: doujiehui
2004-2-14 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (79207959)  编辑帖子  回复  引用回复
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 3 楼』:  

如要应用到循环上,怎样改?

2004-2-14 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Kinglion
铂金会员

痴迷DOS者


积分 5792
发帖 1921
注册 2003-6-20
来自 金獅電腦軟體工作室
状态 离线
『第 4 楼』:  

您的批处理文件里的 dready 是外部命令吧? 你可以试一试 SHIFT 命令。
修改版没有实验,不知能否可用,权作交流吧)

:TOP
CALL %0 c d e f g h i j k l m n o p q r s t u v w x y z
dready %1: /w
if ERRORLEVEL 2  goto az
SHIFT
GO TOP

:az

REM 此批处理启动参数为: c d e f g h i j k l m n o p q r s t u v w x y z

没有具体操作,有什么不妥之处请大家指正。





熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境!
金狮電腦軟體工作室愿竭诚为您服务!
QQ群:8393170(定期清理不发言者)
个人网站:http://www.520269.cn
电子邮件:doujiehui@vip.qq.com
微信公众号: doujiehui
2004-2-14 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (79207959)  编辑帖子  回复  引用回复
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 5 楼』:  

Kinglion,按你的方法不能用呀,该怎样做?

2004-2-14 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

Re walu:

    以下代码根据Kinglion的代码修改,你可以试用一下。另外,你提了许多同类问题,是有什么具体需要吗?学会举一反三应该是最重要的。

  Quote:
@echo off
if not [%1]==[] goto top
call %0 c d e f g h i j k l m n o p q r s t u v w x y z
goto end

:top
dready %1: /w
if ERRORLEVEL 2  goto az
shift
goto top

:az
rem 插入自己的处理代码

:end

[此贴子已经被作者于2004-2-16 7:31:18编辑过]






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




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 7 楼』:  

RE  willsort:
     我在做一些启动盘,所以提了不少批处理问题,每次都得到你热心的帮助,在此一并感谢!我也想能举一反三的学,但因没有一点基础且也没有系统的学,只有一些片断。对一些批处理连意思都理解不了,书店又找到到有关批处理和DOS方面的书籍。请问你有批处理电子书吗?我在网上找过一个《批处理基础与技巧》可惜没找着。其实你就是个批处理的顶级高手,何尝不写本书或写篇详细的学习文章,好让我们学习学习?
象:if [%1]==[$sub] goto sub
     if [%predrive%]==[] goto end
这两句什么意思呢?



2004-2-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

Re walu:

    关于电子书,曾有一些零零散散的版本,自己写曾一些专题,但因只供私人研究,故未做整理,后来在一次又一次的硬盘报废事故中损失殆尽,故此只能对你的要求表示遗憾。

    而批处理的高级研究著作的确很少,他们大多散见于早期的电脑杂志和外文版的DOS教材中,我的经验便是如此积累起来的。

    自己出书的想法对我来说过于空幻,如果本站DOS书编者愿意在批处理上多下一些篇幅,我倒可以尽我所能的提供支持。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

Re walu:

    if [%1]==[$sub] goto sub
    ---------------
    单从字面看,是说调用本程序的第一个命令行参数如果是$sub,则直接转向SUB标签处。

    就其一般性而言,这是批处理程序含带各项参数地调用自身时所常用的一种技巧,以此可以跳跃一些不含参数执行时所需要的数据初始化模块。$sub并非是一个特有的关键字,而只是我在调用子程序时的习惯表示法,当然也可以是其他程序执行时用户一般不会使用到的参数字符串。

    if [%predrive%]==[] goto end
    ---------------
    单从字面看,是说如果环境变量 predrive 为空时直接转向end标签。
   
    就其所用到的特定场合(就是我写的那个批处理)而言,是指在程序中的sub子程序首次调用时(即带参数 $sub d 调用), predrive 尚没有值,而需要转向 end 处给他赋值(即 d)后,供第二轮调用时(即带参数 $sub e 调用)使用。



[此贴子已经被作者于2004-2-16 16:26:00编辑过]






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

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


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



论坛跳转: