标题: 该怎样改这段批处理?
[打印本页]
作者: walu
时间: 2004-2-13 00:00
标题: 该怎样改这段批处理?
如下:
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
竟然不行,该如何改呢?
作者: Kinglion
时间: 2004-2-14 00:00
您的批处理文件里的 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
没有具体操作,有什么不妥之处请大家指正。
作者: walu
时间: 2004-2-14 00:00
如要应用到循环上,怎样改?
作者: Kinglion
时间: 2004-2-14 00:00
您的批处理文件里的 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
没有具体操作,有什么不妥之处请大家指正。
作者: walu
时间: 2004-2-14 00:00
Kinglion,按你的方法不能用呀,该怎样做?
作者: willsort
时间: 2004-2-16 00:00
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编辑过]
作者: walu
时间: 2004-2-16 00:00
RE willsort:
我在做一些启动盘,所以提了不少批处理问题,每次都得到你热心的帮助,在此一并感谢!我也想能举一反三的学,但因没有一点基础且也没有系统的学,只有一些片断。对一些批处理连意思都理解不了,书店又找到到有关批处理和DOS方面的书籍。请问你有批处理电子书吗?我在网上找过一个《批处理基础与技巧》可惜没找着。其实你就是个批处理的顶级高手,何尝不写本书或写篇详细的学习文章,好让我们学习学习?
象:if [%1]==[$sub] goto sub
if [%predrive%]==[] goto end
这两句什么意思呢?
作者: willsort
时间: 2004-2-16 00:00
Re walu:
关于电子书,曾有一些零零散散的版本,自己写曾一些专题,但因只供私人研究,故未做整理,后来在一次又一次的硬盘报废事故中损失殆尽,故此只能对你的要求表示遗憾。
而批处理的高级研究著作的确很少,他们大多散见于早期的电脑杂志和外文版的DOS教材中,我的经验便是如此积累起来的。
自己出书的想法对我来说过于空幻,如果本站DOS书编者愿意在批处理上多下一些篇幅,我倒可以尽我所能的提供支持。
作者: willsort
时间: 2004-2-16 00:00
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编辑过]