比较详细的手把手教你写批处理(willsort题注版)第3/5页

 更新时间:2008年09月03日 11:27:35   作者:  
Climbing 兄可谓用心良苦,受其感昭,略紧微薄之力;原文内容一字未易,仅于每段之下另加题注,其文大多非为纠错,多是年来体会,或偶得,或渐悟,未免偏颇;又加近来俗事渐多,闲情愈少,心浮气燥,一蹴而就。义理悖逆,敬请斧正;措辞不当,尚请莫怪。

特殊命令


if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。



一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:

1、if [not] "参数" == "字符串" 待执行的命令

参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。

例:if "%1"=="a" format a:

==== willsort 编注 =====================================================
if 的命令行帮助中关于此点的描述为:
IF [NOT] string1==string2 command
在此有以下几点需要注意:
1. 包含字符串的双引号不是语法所必须的, 而只是习惯上使用的一种"防空"字符
2. string1 未必是参数, 它也可以是环境变量, 循环变量以及其他字符串常量或变量
3. command 不是语法所必须的, string2 后跟一个空格就可以构成一个有效的命令行
========================================================================

2、if [not] exist [路径\]文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。

如: if exist c:\config.sys type c:\config.sys
表示如果存在c:\config.sys文件,则显示它的内容。

****** willsort 编注 ********
也可以使用以下的用法:
if exist <device> command
device 是指DOS系统中已加载的设备, 在win98下通常有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点:
1. 该设备确实存在(由软件虚拟的设备除外)
2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义)
3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等)
可通过命令 mem/d | find "device" /i 来检阅你的系统中所加载的设备
另外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句柄.
========================================================================

3、if errorlevel <数字> 待执行的命令

很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。

如if errorlevel 2 goto x2

==== willsort 编注 =====================================================
返回值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法, 当使用 set 作为执行命令时, 通常会从小到大顺序排列, 比如需将返回码置入环境变量, 就需使用以下的顺序形式:

if errorlevel 1 set el=1
if errorlevel 2 set el=2
if errorlevel 3 set el=3
if errorlevel 4 set el=4
if errorlevel 5 set el=5
...

当然, 也可以使用以下循环来替代, 原理是一致的:
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e

更高效简洁的用法, 可以参考我写的另一篇关于获取 errorlevel 的文章

出现此种现象的原因是, if errorlevel 比较返回码的判断条件并非等于, 而是大于等于. 由于 goto 的跳转特性, 由小到大排序会导致在较小的返回码处就跳出; 而由于 set命令的 "重复" 赋值特性, 由大到小排序会导致较小的返回码 "覆盖" 较大的返回码.

另外, 虽然 if errorlevel=<数字> command 也是有效的命令行, 但也只是 command.com 解释命令行时将 = 作为命令行切分符而忽略掉罢了
========================================================================


二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。

如:

goto end

:end
echo this is the end

标号用“:字符串”来定义,标号所在行不被执行。

==== willsort 编注 =====================================================
label 常被译为 "标签" , 但是这并不具有广泛的约定性.

goto <label> 与 :<label> 联用可实现执行中途的跳转, 再结合 if 可实现执行过程的条件分支, 多个 if 即可实现命令的分组, 类似 C 中 switch case 结构或者 Basic 中的 select case 结构, 大规模且结构化的命令分组即可实现高级语言中的函数功能. 以下是批处理和C/Basic在语法结构上的对照:

Batch         C / Basic
goto&:         goto&:
goto&:&if         if{}&else{} / if&elseif&endif
goto&:&if...        switch&case / select case
goto&:&if&set&envar...    function() / function(),sub()
========================================================================

三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。

注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。

choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:
该工具允许用户从选择列表选择一个项目并返回所选项目的索引。

参数列表:
/C choices 指定要创建的选项列表。默认列表是 "YN"。

/N 在提示符中隐藏选项列表。提示前面的消息得到显示,
选项依旧处于启用状态。

/CS 允许选择分大小写的选项。在默认情况下,这个工具
是不分大小写的。

/T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0
到 9999。如果指定了 0,就不会有暂停,默认选项
会得到选择。

/D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选
项指定的一组选择中; 同时,必须用 /T 指定 nnnn。

/M text 指定提示之前要显示的消息。如果没有指定,工具只
显示提示。

/? 显示帮助消息。

注意:
ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选
择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,
该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的
ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0
的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降
序排列。

示例:
CHOICE /?
CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"
CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"

==== willsort 编注 =====================================================
我列出win98下choice的用法帮助, 已资区分

Waits for the user to choose one of a set of choices.
等待用户选择一组待选字符中的一个

CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]

/C[:]choices Specifies allowable keys. Default is YN
指定允许的按键(待选字符), 默认为YN
/N Do not display choices and ? at end of prompt string.
不显示提示字符串中的问号和待选字符
/S Treat choice keys as case sensitive.
处理待选字符时大小写敏感
/T[:]c,nn Default choice to c after nn seconds
在 nn 秒后默认选择 c
text Prompt string to display
要显示的提示字符串
ERRORLEVEL is set to offset of key user presses in choices.
ERRORLEVEL 被设置为用户键入的字符在待选字符中的偏移值
========================================================================

如果我运行命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
屏幕上会显示:
确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?

相关文章

  • ipc通道入侵相关命令整理

    ipc通道入侵相关命令整理

    我们在入侵的时候难免遇到忘记命令的时候,现在将我所知道的一些命令总结出来提供给各位。通过这些命令可以解决很大一部分新手的问题。首页我们也需要检查下安全,知道黑客是如何使用的。
    2011-02-02
  • dos下遍历目录和文件的代码(主要利用for命令)

    dos下遍历目录和文件的代码(主要利用for命令)

    对指定路径指定文件进行遍历的程序,这里有多个批处理代码,但运行好像有些问题,大家可以根据需要选择
    2012-09-09
  • 使用批处理bat更改hosts的多个方法

    使用批处理bat更改hosts的多个方法

    最近公司网站使用了cdn,如果用cdn访问网站会出现后台慢,前台修改模版不能实时发现问题,所以就需要我们修改hosts实现本地访问仍然是服务器源站,客户访问的都是前台不需要实时的,下面我们就分享下用bat实现修改hosts的方法
    2014-07-07
  • windows find findstr命令(cmd查找文档中的特定字符)

    windows find findstr命令(cmd查找文档中的特定字符)

    find 命令用于查找文档中的特定字符和数字及行号, 例如我们在阅读文档时, 使用的快捷键 Ctrl + F 来查找是一个效果, 经过 find 查找的字符也可以重定向到一个文本文档里面去, 提取特定的字符, 来进行文档的整合
    2025-03-03
  • 批处理学习教程

    批处理学习教程

    在入侵中,大家有过编一个简单的程序来实现你的目的,BAT应该是大家常用的吧。如果你还没学会,那就快看下面的吧,我相信它会对你有意而无害的
    2012-12-12
  • SunTB编写IP地址设置切换批处理

    SunTB编写IP地址设置切换批处理

    主机MAC与IP分配对应数据库,当内网有MAC绑定时可快速查询相应IP可按示例格式([MAC地址]IP地址)自行添加,每组数据单独一行
    2011-01-01
  • BAT命令连接局域网机子 并打开文件夹

    BAT命令连接局域网机子 并打开文件夹

    把下面的命令Copy到一文件,并保存为 .BAT 文件,以后双击这个文件就可以直接连接局域网的机子,并打开共享文件,按任意键就删除连接。注:username 和 password 为共享机子的访问密码。
    2009-07-07
  • cmd tree命令 以树形格式罗列文件

    cmd tree命令 以树形格式罗列文件

    tree ,在英语中的基本含义是“树”,在cmd中,tree命令的功能是以树形格式罗列文件。
    2009-07-07
  • 批处理 用户是否存在判断

    批处理 用户是否存在判断

    批处理实现的,判断windows用户是否存在的代码。
    2009-05-05
  • 百度贴吧上传图片方式附件利器

    百度贴吧上传图片方式附件利器

    通过这批处理将图片和文件合并成图片,通过更改扩展名切换图片和文件。这样就可以在百度贴吧上传图片式的附件。其实就是一句代码copy /b
    2012-01-01

最新评论