常用批处理命令

来源:互联网 发布:油画 淘宝 编辑:程序博客网 时间:2024/06/06 05:45

CALL
作用:从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。
可以调用自己但是要在末尾加exit否则会陷入死循环

FOR在批处理程序中的使用语法如下:
FOR %%变量 IN (集合) DO 命令 [命令参数]
FOR在命令提示符下的使用语法如下:
FOR %变量 IN (集合) DO 命令 [命令参数]

@ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显.

CR(0D)     命令行结束符
  Escape(1B)     ANSI转义字符引导符
  Space(20)     常用的参数界定符
  Tab(09) ; =     不常用的参数界定符
  +       COPY命令文件连接符
  * ?         文件通配符
  ""         字符串界定符
  |         命令管道符
  < > >>     文件重定向符
  @         命令行回显屏蔽符
  /         参数开关引导符
  :         批处理标签引导符
  %         批处理变量引导符
 
echo 表示显示此命令后的字符
echo off 表示在此语句后所有运行的命令都不显示命令行本身
@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。

pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续
=======================================================================
一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
1、if [not] "参数" == "字符串" 待执行的命令
参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。
例:if "%1"=="a" format a:

  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]?

例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errorlevel 1 goto defrag
:defrag
c:/dos/defrag
goto end
:mem
mem
goto end
:end
echo good bye
此批处理运行后,将显示“defrag,mem,end[D,M,E]?” ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。

原创粉丝点击