中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 怎样利用循环和设置变量改写这段批处理?
作者:
标题: 怎样利用循环和设置变量改写这段批处理? 上一主题 | 下一主题
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『楼 主』:  怎样利用循环和设置变量改写这段批处理?

象这段批处理:
@echo off
dready e: /w
if ERRORLEVEL 255 call setup.bat d:
dready f: /w
if ERRORLEVEL 255 call setup.bat e:
dready g: /w
if ERRORLEVEL 255 call setup.bat f:
......
dready z: /w
if ERRORLEVEL 255 call setup.bat z:

怎样利用循环和设置变量改写使得更简单明了?


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

Batchinger


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

Re walu:

    主要是循环体子程序的书写,如果有必要,可以将主程序与子程序包含在同一文件。

  Quote:
第一方案:

::MAIN.BAT
for %%d in (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 sub.bat %%d

::SUB.BAT
if [%predrive%]==[] goto end
dready %1: /w
if errorlevel 255 call setup.bat %predrive%:
:end
set predrive=%1

第二方案:

::LOOP.BAT
if [%1]==[$sub] goto sub
for %%d in (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 %0 $sub %%d
goto end

:sub
if [%predrive%]==[] goto end
dready %1: /w
if errorlevel 255 call setup.bat %predrive%:
:end
set predrive=%1

[此贴子已经被作者于2004-1-25 12:30:47编辑过]






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




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

第一方案可行,但我不想把一个批处理变成两个批处理,第二方案却显示错误命令或文件名,为什么这样?还有哪位大侠知道?请指点!

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

Batchinger


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

Re walu:

    for %%d in (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 %0.bat $sub %%d
中 %0.bat 改为 %0


[此贴子已经被作者于2004-1-25 12:28:46编辑过]






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




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



  Quote:
以下是引用willsort在2004-1-23 20:16:35的发言:
Re walu:

    for %%d in (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 %0.bat $sub %%d
中 %0.bat 改为 %

Re willsort
这样改还是不行呀,请再指教指教。谢谢!

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

Batchinger


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

Re walu:

    抱歉,学习批处理多年,仍然犯这种低级错误。主要是眼高手低的缘故,总以为一个很简单的程序根本不需测试。实际上,我的第一方案经过测试,所以无错;而第二方案是在第一方案的基础上简单修改而来的,所以在许多细节上出现谬误。下面给出最新修改后的代码,欢迎你继续提出程序改进的建议和意见。

  Quote:
::LOOP.BAT
@echo off
if [%1]==[$sub] goto sub
for %%d in (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 %0 $sub %%d
goto end

:sub
if [%predrive%]==[] goto end
dready %2: /w
if errorlevel 255 call setup.bat %predrive%:

:end
set predrive=%2





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




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


请教willsort,如果把这段批处理:
@echo off
dready e: /w
if ERRORLEVEL 255 call setup.bat d:
dready f: /w
if ERRORLEVEL 255 call setup.bat e:
dready g: /w
if ERRORLEVEL 255 call setup.bat f:
......
dready z: /w
if ERRORLEVEL 255 call setup.bat z:

改为

@echo off
dready e: /w
if ERRORLEVEL 255 call setup.bat 3
dready f: /w
if ERRORLEVEL 255 call setup.bat 4
dready g: /w
if ERRORLEVEL 255 call setup.bat 5
......
dready w: /w
if ERRORLEVEL 255 call setup.bat 21:


又该怎样处理呢?

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

Batchinger


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

Re walu:

    给你一个思路,你可以自己也锻炼一下,遇到什么问题在探讨吧。

    http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=12&ID=9090



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

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


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



论坛跳转: