中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-13 04:58
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 怎样利用循环和设置变量改写这段批处理? 查看 1,503 回复 7
楼 主 怎样利用循环和设置变量改写这段批处理? 发表于 2004-01-11 00:00 ·  中国 广东 河源 电信
高级用户
★★
积分 916
发帖 201
注册 2003-05-04 00:00
23年会员
UID 1849
性别 男
状态 离线
象这段批处理:
@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:

怎样利用循环和设置变量改写使得更简单明了?
2 发表于 2004-01-11 00:00 ·  中国 山西 太原 联通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re walu:

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


第一方案:

::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 == goto end
dready %1: /w
if errorlevel 255 call setup.bat %predrive%:
:end
set predrive=%1

第二方案:

::LOOP.BAT
if == 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 == goto end
dready %1: /w
if errorlevel 255 call setup.bat %predrive%:
:end
set predrive=%1







※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
3 发表于 2004-01-22 00:00 ·  中国 广东 河源 电信
高级用户
★★
积分 916
发帖 201
注册 2003-05-04 00:00
23年会员
UID 1849
性别 男
状态 离线
第一方案可行,但我不想把一个批处理变成两个批处理,第二方案却显示错误命令或文件名,为什么这样?还有哪位大侠知道?请指点!
4 发表于 2004-01-23 00:00 ·  中国 山西 太原 联通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
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


※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
5 发表于 2004-01-24 00:00 ·  中国 广东 河源 电信
高级用户
★★
积分 916
发帖 201
注册 2003-05-04 00:00
23年会员
UID 1849
性别 男
状态 离线
以下是引用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
这样改还是不行呀,请再指教指教。谢谢!
6 发表于 2004-01-26 00:00 ·  中国 山西 太原 联通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re walu:

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


::LOOP.BAT
@echo off
if == 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 == goto end
dready %2: /w
if errorlevel 255 call setup.bat %predrive%:

:end
set predrive=%2
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
7 发表于 2004-01-27 00:00 ·  中国 广东 河源 电信
高级用户
★★
积分 916
发帖 201
注册 2003-05-04 00:00
23年会员
UID 1849
性别 男
状态 离线

请教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:


又该怎样处理呢?
8 发表于 2004-01-27 00:00 ·  中国 山西 太原 联通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re walu:

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

http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=12&ID=9090
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
论坛跳转: