安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

BAT批处理脚本教程

6月18日 醉殇别投稿
  BAT批处理脚本教程
  第一章批处理基础
  第一节常用批处理内部命令简介
  批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。
  小知识:可以在键盘上按下CtrlC组合键来强行终止一个批处理的执行过程。
  了解了大概意思后,我们正式开始学习。先看一个简单的例子!
  echooff
  echo欢迎来到非常BAT!
  pause
  把上面的3条命令保存为文件test。bat或者test。cmd然后执行,
  他就会在屏幕上显示以下二行话:
  欢迎来到非常BAT!
  请按任意键继续。。。
  这就是一个简单批处理文件了,这个批处理文件一共就用了2条命令echo和pause还有一个特殊符号
  从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些最常用的!
  (以下内容来源网络,请各位仔细阅读,好进入下节的实例说明)
  批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)
  1、REM和::
  2、ECHO和
  3、PAUSE
  4、ERRORLEVEL
  5、TITLE
  6、COLOR
  7、mode配置系统设备
  8、GOTO和:
  9、FIND
  10、START
  11、assoc和ftype
  12、pushd和popd
  13、CALL
  14、shift
  15、IF
  16、setlocal与变量延迟
  17、ATTRIB显示或更改文件属性
  介绍命令
  1、REM和::
  REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。
  其次,::也可以起到rem的注释作用,而且更简洁有效;但有两点需要注意:
  第一,任何以冒号:开头的字符行,在批处理中都被视作标号,而直接忽略其后的所有内容。
  有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。
  无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以::常被用作注释符号,其实:也可起注释作用。
  第二,与rem不同的是,::后的字符行在执行时不会回显,无论是否用echoon打开命令行回显状态,因为命令解释器不认为他是一个有效的命令行,就此点来看,rem在某些场合下将比::更为适用;另外,rem可以用于config。sys文件中。
  行内注释格式:注释内容(不常用,慎用)
  2、ECHO和
  字符放在命令前将关闭该命令回显,无论此时echo是否为打开状态。
  echo命令的作用列举如下:
  (1)打开回显或关闭回显功能
  格式:echo〔{onoff}〕
  如果想关闭ECHOOFF命令行自身的显示,则需要在该命令行前加上。
  (2)显示当前ECHO设置状态
  格式:echo
  (3)输出提示信息
  格式:ECHO信息内容
  上述是ECHO命令常见的三种用法,也是大家熟悉和会用的,但作为DOS命令淘金者你还应该知道下面的技巧:
  (4)关闭DOS命令提示符
  在DOS提示符状态下键入ECHOOFF,能够关闭DOS提示符的显示使屏幕只留下光标,直至键入ECHOON,提示符才会重新出现。
  (5)输出空行,即相当于输入一个回车
  格式:ECHO
  值得注意的是命令行中的要紧跟在ECHO后面中间不能有空格,否则将被当作提示信息输出到屏幕。另外可以用,:;〔〕等任一符号替代。
  命令ECHO输出的回车,经DOS管道转向可以作为其它命令的输入,比如echo。time即相当于在TIME命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到DOS提示符状态
  (6)答复命令中的提问
  格式:ECHO答复语命令文件名
  上述格式可以用于简化一些需要人机对话的命令(如:CHKDSKF;FORMATDrive:;del。)的操作,它是通过DOS管道命令把ECHO命令输出的预置答复语作为人机对话命令的输入。下面的例子就相当于在调用的命令出现人机对话时输入Y回车:
  C:ECHOYCHKDSKF
  C:ECHOYDELA:。
  (7)建立新文件或增加文件内容
  格式:ECHO文件内容文件名
  ECHO文件内容文件名
  例如:
  C:ECHOECHOOFFAUTOEXEC。BAT建立自动批处理文件
  C:ECHOC:CPAVBOOTSAFEAUTOEXEC。BAT向自动批处理文件中追加内容
  C:TYPEAUTOEXEC。BAT显示该自动批处理文件
  ECHOOFF
  C:CPAVBOOTSAFE
  (8)向打印机输出打印内容或打印控制码
  格式:ECHO打印机控制码;PRN
  ECHO打印内容;PRN
  下面的例子是向M1724打印机输入打印控制码。Alt156是按住Alt键在小键盘键入156,类似情况依此类推:
  C:ECHO15642116;PRN(输入下划线命令FSt)
  C:ECHO〔email155〕155;PRN〔email〕(输入初始化命令ESC)
  C:ECHO。;PRN(换行)
  (9)使喇叭鸣响
  C:ECHOG
  G是在dos窗口中用CtrlG或Alt007输入,输入多个G可以产生多声鸣响。使用方法是直接将其加入批处理文件中或做成批处理文件调用。
  这里的G属于特殊符号的使用,请看本文后面的章节
  3、PAUSE
  PAUSE,玩游戏的人都知道,暂停的意思
  在这里就是停止系统命令的执行并显示下面的内容。
  例:
  PAUSE
  运行显示:
  请按任意键继续。。。
  要显示其他提示语,可以这样用:
  Echo其他提示语pausenul
  4、errorlevel
  程序返回码
  echoerrorlevel
  每个命令运行结束,可以用这个命令行格式查看返回码
  用于判断刚才的命令是否执行成功
  默认值为0,一般命令执行出错会设errorlevel为1
  5、title
  设置cmd窗口的标题
  title新标题可以看到cmd窗口的标题栏变了
  6、COLOR
  设置默认的控制台前景和背景颜色。
  COLOR〔attr〕
  attr指定控制台输出的颜色属性
  颜色属性由两个十六进制数字指定第一个为背景,第二个则为
  前景。每个数字可以为以下任何值之一:
  0黑色8灰色
  1蓝色9淡蓝色
  2绿色A淡绿色
  3湖蓝色B淡浅绿色
  4红色C淡红色
  5紫色D淡紫色
  6黄色E淡黄色
  7白色F亮白色
  如果没有给定任何参数,该命令会将颜色还原到CMD。EXE启动时
  的颜色。这个值来自当前控制台窗口、T开关或
  DefaultColor注册表值。
  如果用相同的前景和背景颜色来执行COLOR命令,COLOR命令
  会将ERRORLEVEL设置为1。
  例如:COLORfc在亮白色上产生亮红色
  7、mode配置系统设备
  配置系统设备。
  串行口:MODECOMm〔:〕〔BAUDb〕〔PARITYp〕〔DATAd〕〔STOPs〕
  〔toonoff〕〔xononoff〕〔odsronoff〕
  〔octsonoff〕〔dtronoffhs〕
  〔rtsonoffhstg〕〔idsronoff〕
  设备状态:MODE〔device〕〔STATUS〕
  打印重定向:MODELPTn〔:〕COMm〔:〕
  选定代码页:MODECON〔:〕CPSELECTyyy
  代码页状态:MODECON〔:〕CP〔STATUS〕
  显示模式:MODECON〔:〕〔COLSc〕〔LINESn〕
  击键率:MODECON〔:〕〔RATErDELAYd〕
  例:
  modeconcols113lines15color9f
  此命令设置DOS窗口大小:15行,113列
  8、GOTO和:
  GOTO会点编程的朋友就会知道这是跳转的意思。
  在批处理中允许以:XXX来构建一个标号,然后用GOTOXXX跳转到标号:XXX处,然后执行标号后的命令。
  例:
  if{1}{}gotonoparms
  if2gotonoparms
  标签的名字可以随便起,但是最好是有意义的字符串啦,前加个冒号用来表示这个字符串是标签,goto命令就是根据这个冒号(:)来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
  例:
  echooff
  :start
  setavar1
  echovar
  ifvarleq3GOTOstart
  pause
  运行显示:
  1hr2hr3hr4hr10、start命令
  批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令
  例:startexplorerd:
  调用图形界面打开D盘
  11、assoc和ftype
  文件关联
  assoc设置文件扩展名关联,关联到文件类型
  ftype设置文件类型关联,关联到执行程序和参数
  当你双击一个。txt文件时,windows并不是根据。txt直接判断用notepad。exe打开
  而是先判断。txt属于txtfile文件类型
  再调用txtfile关联的命令行txtfileSystemRootsystem32NOTEPAD。EXE1
  可以在文件夹选项文件类型里修改这2种关联
  assoc显示所有文件扩展名关联
  assoc。txt显示。txt代表的文件类型,结果显示。txttxtfile
  assoc。doc显示。doc代表的文件类型,结果显示。docWord。Document。8
  assoc。exe显示。exe代表的文件类型,结果显示。exeexefile
  ftype显示所有文件类型关联
  ftypeexefile显示exefile类型关联的命令行,结果显示exefile1
  assoc。txtWord。Document。8
  设置。txt为word类型的文档,可以看到。txt文件的图标都变了
  assoc。txttxtfile
  恢复。txt的正确关联
  ftypeexefile1
  恢复exefile的正确关联
  如果该关联已经被破坏,可以运行command。com,再输入这条命令
  12、pushd和popd
  切换当前目录
  echooff
  c:cdmdmp3在C:建立mp3文件夹
  mdd:mp4在D:建立mp4文件夹
  cddd:mp4更改当前目录为d:mp4
  pushdc:mp3保存当前目录,并切换当前目录为c:mp3
  popd恢复当前目录为刚才保存的d:mp4
  一般用处不大,在当前目录名不确定时,会有点帮助。(dos编程中很有用)
  13、CALL
  CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理
  CALLcommand
  调用一条批处理命令,和直接执行命令效果一样,特殊情况下很有用,比如变量的多级嵌套,见教程后面。在批处理编程中,可以根据一定条件生成命令字符串,用call可以执行该字符串,见例子。
  CALL〔drive:〕〔path〕filename〔batchparameters〕
  调用的其它批处理程序。filename参数必须具有。bat或。cmd扩展名。
  CALL:labelarguments
  调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头
  以命令goto:eof结尾。
  另外,批脚本文本参数参照(0、1、等等)已如下改变:
  批脚本里的指出所有的参数(如12345。。。)
  批参数(n)的替代已被增强。您可以使用以下语法:(看不明白的直接运行后面的例子)
  1删除引号(),扩充1
  f1将1扩充到一个完全合格的路径名
  d1仅将1扩充到一个驱动器号
  p1仅将1扩充到一个路径
  n1仅将1扩充到一个文件名
  x1仅将1扩充到一个文件扩展名
  s1扩充的路径指含有短名
  a1将1扩充到文件属性
  t1将1扩充到文件的日期时间
  z1将1扩充到文件的大小
  PATH:1查找列在PATH环境变量的目录,并将1
  扩充到找到的第一个完全合格的名称。如果环境
  变量名未被定义,或者没有找到文件,此组合键会
  扩充到空字符串
  可以组合修定符来取得多重结果:
  dp1只将1扩展到驱动器号和路径
  nx1只将1扩展到文件名和扩展名
  dpPATH:1在列在PATH环境变量中的目录里查找1,
  并扩展到找到的第一个文件的驱动器号和路径。
  ftza1将1扩展到类似DIR的输出行。
  在上面的例子中,1和PATH可以被其他有效数值替换。
  语法被一个有效参数号码终止。修定符不能跟使用
  注意:参数扩充时不理会参数所代表的文件是否真实存在,均以当前目录进行扩展
  要理解上面的知识,下面的例子很关键。
  例:
  echooff
  Echo产生一个临时文件tmp。txt
  Rem下行先保存当前目录,再将c:windows设为当前目录
  pushdc:windows
  Call:subtmp。txt
  Rem下行恢复前次的当前目录
  Popd
  Call:subtmp。txt
  pause
  Deltmp。txt
  exit
  :sub
  Echo删除引号:1
  Echo扩充到路径:f1
  Echo扩充到一个驱动器号:d1
  Echo扩充到一个路径:p1
  Echo扩充到一个文件名:n1
  Echo扩充到一个文件扩展名:x1
  Echo扩充的路径指含有短名:s1
  Echo扩充到文件属性:a1
  Echo扩充到文件的日期时间:t1
  Echo扩充到文件的大小:z1
  Echo扩展到驱动器号和路径:dp1
  Echo扩展到文件名和扩展名:nx1
  Echo扩展到类似DIR的输出行:ftza1
  Echo。
  Goto:eof
  例:
  setaa123456
  setcmdstrechoaa
  callcmdstr
  pause
  本例中如果不用call,而直接运行cmdstr,将显示结果aa,而不是123456
  14、shift
  更改批处理文件中可替换参数的位置。
  SHIFT〔n〕
  如果命令扩展名被启用,SHIFT命令支持n命令行开关;该命令行开关告诉
  命令从第n个参数开始移位;n介于零和八之间。例如:
  SHIFT2
  会将3移位到2,将4移位到3,等等;并且不影响0和1。
  15、IF
  IF条件判断语句,语法格式如下:
  IF〔NOT〕ERRORLEVELnumbercommand
  IF〔NOT〕string1string2command
  IF〔NOT〕EXISTfilenamecommand
  下面逐一介绍,更详细的分析请看后面章节。
  (1)IF〔NOT〕ERRORLEVELnumbercommand
  IFERRORLEVEL这个句子必须放在某一个命令的后面,执行命令后由IFERRORLEVEL来判断命令的返回值。
  Number的数字取值范围0255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立
  例:
  echooff
  dirc:
  rem退出代码为1就跳至标题1处执行,0就跳至标题0处执行
  IFERRORLEVEL1goto1
  IFERRORLEVEL0goto0
  Rem上面的两行不可交换位置,否则失败了也显示成功。
  :0
  echo命令执行成功!
  Rem程序执行完毕跳至标题exit处退出
  gotoexit
  :1
  echo命令执行失败!
  Rem程序执行完毕跳至标题exit处退出
  gotoexit
  :exit
  pause
  运行显示:命令执行成功!
  (2)IF〔NOT〕string1string2command
  string1和string2都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思)
  条件相等后即执行后面的command
  检测当前变量的值做出判断,为了防止字符串中含有空格,可用以下格式
  if〔NOT〕{string1}{string2}command
  if〔NOT〕〔string1〕〔string2〕command
  if〔NOT〕string1string2command
  这种写法实际上将括号或引号当成字符串的一部分了,只要等号左右两边一致就行了,比如下面的写法就不行:
  if{string1}〔string2〕command
  (3)IF〔NOT〕EXISTfilenamecommand
  EXISTfilename为文件或目录存在的意思
  echooff
  IFEXISTautoexec。batecho文件存在!
  IFnotEXISTautoexec。batecho文件不存在!
  这个批处理大家可以放在C盘和D盘分别执行,看看效果
  16、setlocal与变量延迟
  本条内容引用〔英雄出品〕的批处理教程:
  要想进阶,变量延迟是必过的一关!所以这一部分希望你能认真看。
  为了更好的说明问题,我们先引入一个例子。
  例1:
  echooff
  seta4
  seta5echoa
  pause
  结果:4
  解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了?
  让我们先了解一下批处理运行命令的机制:
  批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例1,批处理在运行到这句seta5echoa之前,先把这一句整句读取并做了预处理对变量a赋了值,那么a当然就是4了!(没有为什么,批处理就是这样做的。)
  而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说延迟了对变量的赋值。
  那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下:
  例2:
  echooff
  setlocalenabledelayedexpansion
  seta4
  seta5echo!a!
  pause
  结果:5
  解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是setlocalenabledelayedexpansion,并且变量要用一对叹号!!括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
  分析一下例2,首先setlocalenabledelayedexpansion开启变量延迟,然后seta4先给变量a赋值为
  4,seta5echo!a!这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。
  再举一个例子巩固一下。
  例3:
  echooff
  setlocalenabledelayedexpansion
  forliin(1,1,5)do(
  setai
  echo!a!
  )
  pause
  结果:
  1hr2hr3hr4hr5hr解说:本例开启了变量延迟并用!!将变量扩起来,因此得到我们预期的结果。如果不用变量延迟会出现什
  么结果呢?结果是这样的:
  ECHO处于关闭状态。
  ECHO处于关闭状态。
  ECHO处于关闭状态。
  ECHO处于关闭状态。
  ECHO处于关闭状态。
  即没有感知到for语句中的动态变化。
  提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。这一点也可以加以利用,看例子。
  例:交换两个变量的值,且不用中间变量
  echooff
  ::目的:交换两个变量的值,但是不使用临时变量
  ::CodebyJM2007124〔emailCMDXP〕CMDXP〔email〕
  ::出处:http:www。cndos。netforumviewthread。php?tid27078
  setvar1abc
  setvar2123
  echo交换前:var1var1var2var2
  setvar1var2setvar2var1
  echo交换后:var1var1var2var2
  pause
  17、ATTRIB显示或更改文件属性
  ATTRIB〔RR〕〔AA〕〔SS〕〔HH〕〔〔drive:〕〔path〕filename〕〔S〔D〕〕
  设置属性。
  清除属性。
  R只读文件属性。
  A存档文件属性。
  S系统文件属性。
  H隐藏文件属性。
  〔drive:〕〔path〕〔filename〕
  指定要处理的文件属性。
  S处理当前文件夹及其子文件夹中的匹配文件。
  D也处理文件夹。
  例:
  mdautorun
  attribashautorun
  上面的命令将建立文件夹autorun,然后将其设为存档、系统、隐藏属性
  第二节常用特殊符号
  1、命令行回显屏蔽符
  2、批处理变量引导符
  3、重定向符
  4、重定向符
  5、、、重定向符
  6、命令管道符
  7、转义字符
  8、组合命令
  9、组合命令
  10、组合命令
  11、字符串界定符
  12、,逗号
  13、;分号
  14、()括号
  15、!感叹号
  16、批处理中可能会见到的其它特殊标记符:(略)
  CR(0D)命令行结束符
  Escape(1B)ANSI转义字符引导符
  Space(20)常用的参数界定符
  Tab(09);不常用的参数界定符
  COPY命令文件连接符
  ?文件通配符
  参数开关引导符
  :批处理标签引导符
  废话少说,开讲了
  1、命令行回显屏蔽符
  这个字符在批处理中的意思是关闭当前行的回显。我们从前几课知道
  ECHOOFF可以关闭掉整个批处理命令的回显,但不能关掉ECHOOFF这个命令,现在我们在ECHOOFF这个命令前加个,就可以达到所有命令均不回显的要求
  2、批处理变量引导符
  这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个一起使用的情况除外,以后还将详细介绍)。
  引用变量用var,调用程序外部参数用1至9等等
  0123456789为命令行传递给批处理的参数
  0批处理文件本身,包括完整的路径和扩展名
  1第一个参数
  9第九个参数
  从第一个参数开始的所有参数
  参数0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
  例:最简单的复制文件自身的方法
  copy0d:wind。bat
  小技巧:添加行内注释
  注释内容(可以用作行内注释,不能出现重定向符号和管道符号)
  为什么这样呢?此时注释内容其实被当作变量,其值是空的,故只起注释作用,不过这种用法容易出现语法错误,一般不用。
  3、重定向符
  输出重定向命令
  这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台)
  在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符,,和语句块的制约限制。
  比如:
  使用命令:echohello1。txt将建立文件1。txt,内容为hello(注意行尾有一空格)
  使用命令:echohello1。txt将建立文件1。txt,内容为hello(注意行尾没有空格)
  4、重定向符
  输出重定向命令
  这个符号的作用和有点类似,但他们的区别是是传递并在文件的末尾追加,而是覆盖
  用法同上
  同样拿1。txt做例子
  使用命令:
  echohello1。txt
  echoworld1。txt
  这时候1。txt内容如下:
  hello
  world
  5、、、重定向符
  这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。(本人已查过,网上也查不到相关资料)
  ,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
  echooff
  echo20050501temp。txt
  datetemp。txt
  deltemp。txt
  这样就可以不等待输入直接修改当前日期
  ,将一个句柄的输出写入到另一个句柄的输入中。
  ,刚好和相反,从一个句柄读取输入并将其写入到另一个句柄输出中。
  常用句柄:0、1、2,未定义句柄:39
  1nul表示禁止输出正确的信息
  2nul表示禁止输出错误信息。
  其中的1与2都是代表某个数据流输入输出的地址(NTCMD称之为句柄,MSDOS称之为设备)。
  句柄0:标准输入stdin,键盘输入
  句柄1:标准输出stdout,输出到命令提示符窗口(console,代码为CON)
  句柄2:标准错误stderr,输出到命令提示符窗口(console,代码为CON)
  其中的stdin可被重定向,stdout可被、重定向。
  我们已经知道读取文本中的内容可以用for命令,但如果只需要读取第一行用for命令就有点麻烦。简单的办法如下:
  echooff
  0
  echostr
  pause
  运行显示批处理文件自身的第一行:echooff
  6、命令管道符
  格式:第一条命令第二条命令〔第三条命令。。。〕
  将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
  例如:
  dirc:findtxt
  以上命令是:查找C:所有,并发现TXT字符串。
  FIND的功能请用FIND?自行查看
  在不使format的自动格式化参数时,我是这样来自动格式化A盘的
  echoyformata:sqv:system
  用过format的都知道,再格盘时要输入y来确认是否格盘,这个命令前加上echoy并用字符来将echoy的结果传给format命令
  从而达到自动输入y的目的
  (这条命令有危害性,测试时请慎重)
  7、转义字符
  是对特殊符号,,的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。
  比如
  echotest1。txt
  结果则是:test1。txt
  他没有追加在1。txt里,呵呵。只是显示了出来
  另外,此转义字符还可以用作续行符号。
  举个简单的例子:
  echooff
  echo英雄
  是
  好
  男人
  pause
  不用多说,自己试一下就明白了。
  为什么转义字符放在行尾可以起到续行符的作用呢?原因很简单,因为每行末尾还有一个看不见的符号,即回车符,转义字符位于行尾时就让回车符失效了,从而起到了续行的作用。
  8、组合命令
  语法:第一条命令第二条命令〔第三条命令。。。〕
  、、为组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。因为批处理认行不认命令数目。
  这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。
  这里两边的命令是顺序执行的,从前往后执行。
  比如:
  dirz:diry:dirc:
  以上命令会连续显示z,y,c盘的内容,不理会该盘是否存在
  9、组合命令
  语法:第一条命令第二条命令〔第三条命令。。。〕
  用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
  这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行
  dirz:diry:dirc:
  10、组合命令
  语法:第一条命令第二条命令〔第三条命令。。。〕
  用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
  提示:组合命令和重定向命令一起使用必须注意优先级
  管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令
  问题:把C盘和D盘的文件和文件夹列出到a。txt文件中。看例:
  dirc:dird:a。txt
  这样执行后a。txt里只有D盘的信息!为什么?因为组合命令的优先级没有重定向命令的优先级高!所以这句在执行时将本行分成这两部分:dirc:和dird:a。txt,而并不是如你想的这两部分:dirc:dird:和a。txt。要使用组合命令达到题目的要求,必须得这么写:
  dirc:a。txtdird:a。txt
  这样,依据优先级高低,DOS将把这句话分成以下两部分:dirc:a。txt和dird:a。txt。例十八中的几句的差别比较特殊,值得好好研究体会一下。
  当然这里还可以利用命令(自己想一下道理哦):
  dirc:a。txtdird:a。txt
  〔这个也可以用dirc:;d:a。txt来实现〕
  11、字符串界定符
  双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
  cdprogramfiles
  cdprogra1
  cdpro
  以上三种方法都可以进入programfiles这个目录
  12、,逗号
  逗号相当于空格,在某些情况下,可以用来当做空格使
  比如
  dir,c:
  13、;分号
  分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。(有人说不会继续执行,其实测试一下就知道了)
  比如:
  dirc:;d:;e:;z:
  以上命令相当于
  dirc:
  dird:
  dire:
  dirf:
  如果其中z盘不存在,运行显示:系统找不到指定的路径。然后终止命令的执行。
  例:dirc:;d:;e:1。txt
  以上命令相当于
  dirc:
  dird:
  dire:1。txt
  其中文件e:1。txt不存在,但e盘存在,有错误提示,但命令仍会执行。
  为什么?如果目标路径不存在,则终止执行;如果路径存在,仅文件不存在,则继续执行。
  就说这些了!各位有什么意见请回贴!有什么疑问请到BAT交流区发贴!下一节改进!
  14、()括号
  小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。
  括号在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用,请看例子。
  例:
  命令:echo1echo2echo3
  可以写成:
  (
  echo1
  echo2
  echo3
  )
  上面两种写法效果一样,这两种写法都被视为是一条命令行。
  注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。
  15、!感叹号
  没啥说的,在变量延迟问题中,用来表示变量,即var应该表示为!var!,请看前面的setlocal命令介绍。
  第二章DOS循环:for命令详解
  讲FOR之前呢,咋先告诉各位新手朋友,如果你有什么命令不懂,直接在CMD下面输入:
  name?这样的格式来看系统给出的帮助文件,比如for?就会把FOR命令的帮助全部显示出来!当然许多菜鸟都看不懂。。。。所以才会有那么多批处理文章!!!!俺也照顾菜鸟,把FOR命令用我自己的方式说明下!
  正式开始:
  一、基本格式
  FORvariableIN(set)DOcommand〔commandparameters〕
  variable指定一个单一字母表示可替换的参数。
  (set)指定一个或一组文件。可以使用通配符。
  command指定对每个文件执行的命令。
  commandparameters
  为特定命令指定参数或命令行开关。
  参数:FOR有4个参数dlrf他们的作用我在下面用例子解释
  现在开始讲每个参数的意思
  二、参数d
  FORDvariableIN(set)DOcommand〔commandparameters〕
  如果集中包含通配符,则指定与目录名匹配,而不与文件
  名匹配。
  如果Set(也就是我上面写的相关文件或命令)包含通配符(和?),将对与Set相匹配的每个目录(而不是指定目录中的文件组)执行指定的Command。
  这个参数主要用于目录搜索,不会搜索文件,看这样的例子
  echooff
  fordiin(c:)doechoi
  pause
  运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示!
  在来一个,比如我们要把当前路径下文件夹的名字只有13个字母的打出来
  echooff
  fordiin(???)doechoi
  pause
  这样的话如果你当前目录下有目录名字只有13个字母的,就会显示出来,没有就不显示了
  这里解释下号和?号的作用,号表示任意N个字符,而?号只表示任意一个字符
  知道作用了,给大家个思考题目!
  echooff
  fordiin(window?)doechoi
  pause
  保存到C盘下执行,会显示什么呢?自己看吧!显示:windows
  D参数只能显示当前目录下的目录名字,这个大家要注意!
  三、参数R
  FORR〔〔drive:〕path〕variableIN(set)DOcommand〔commandparameters〕
  检查以〔drive:〕path为根的目录树,指向每个目录中的
  FOR语句。如果在R后没有指定目录,则使用当前
  目录。如果集仅为一个单点(。)字符,则枚举该目录树。
  递归
  上面我们知道,D只能显示当前路径下的目录名字,那么现在这个R也是和目录有关,他能干嘛呢?放心他比D强大多了!
  他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字,有什么用看例子!
  请注意2点:
  1、set中的文件名如果含有通配符(?或),则列举R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
  2、相反,如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录),而不管set中的指定文件是否存在。这与前面所说的单点(。)枚举目录树是一个道理,单点代表当前目录,也可视为一个文件。
  例:
  echooff
  forrc:iin(。exe)doechoi
  pause
  咱们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!!!!
  例:
  echooff
  forriin(。exe)doechoi
  pause
  参数不一样了吧!这个命令前面没加那个C:也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这个BAT你把他放在d:est目录下执行,那么他就会把D:est目录和他下面的子目录的全部EXE文件列出来!!!
  例:
  echooff
  forrc:iin(boot。ini)doechoi
  pause
  运行本例发现枚举了c盘所有目录,为了只列举boot。ini存在的目录,可改成下面这样:
  echooff
  forrc:iin(boot。ini)doifexistiechoi
  pause
  用这条命令搜索文件真不错
  这个参数大家应该理解了吧!还是满好玩的命令!
  四、参数L
  FORLvariableIN(start,step,end)DOcommand〔commandparameters〕
  该集表示以增量形式从开始到结束的一个数字序列。
  因此,(1,1,5)将产生序列12345,(5,1,1)将产生
  序列(54321)。
  使用迭代变量设置起始值(Start),然后逐步执行一组范围的值,直到该值超过所设置的终止值(End)。L将通过对Start与End进行比较来执行迭代变量。如果Start小于End,就会执行该命令。如果迭代变量超过End,则命令解释程序退出此循环。还可以使用负的Step以递减数值的方式逐步执行此范围内的值。例如,(1,1,5)生成序列12345,而(5,1,1)则生成序列(54321)。语法是:
  看着这说明有点晕吧!咱们看例子就不晕了!
  echooff
  forliin(1,1,5)doechoi
  pause
  保存执行看效果,他会打印从12345这样5个数字
  (1,1,5)这个参数也就是表示从1开始每次加1直到5终止!
  等会晕,就打印个数字有P用。。。好的满足大家,看这个例子
  echooff
  forliin(1,1,5)dostartcmd
  pause
  执行后是不是吓了一跳,怎么多了5个CMD窗口,呵呵!如果把那个(1,1,5)改成(1,1,65535)会有什么结果,我先告诉大家,会打开65535个CMD窗口。。。。这么多你不死机算你强!
  当然我们也可以把那个startcmd改成mdi这样就会建立指定个目录了!!!名字为165535
  看完这个被我赋予破坏性质的参数后,我们来看最后一个参数
  五、参数F
  迭代及文件解析
  使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。使用options令牌选项指定哪些令牌应该作为迭代变量传递。请注意:在没有使用令牌选项时,F将只检查第一个令牌。
  文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代变量值,调用for循环。默认情况下,F传递每个文件每一行的第一个空白分隔符号。跳过空行。
  详细的帮助格式为:
  FORF〔options〕variableIN(fileset)DOcommand〔commandparameters〕
  FORF〔options〕variableIN(string)DOcommand〔commandparameters〕
  FORF〔options〕variableIN(command)DOcommand〔commandparameters〕
  带引号的字符串options包括一个或多个
  指定不同解析选项的关键字。这些关键字为:
  eolc指一个行注释字符的结尾(就一个)
  skipn指在文件开始时忽略的行数。
  delimsxxx指分隔符集。这个替换了空格和跳格键的
  默认分隔符集。
  tokensx,y,mn指每行的哪一个符号被传递到每个迭代
  的for本身。这会导致额外变量名称的分配。mn
  格式为一个范围。通过nth符号指定mth。如果
  符号字符串中的最后一个字符星号,
  那么额外的变量将在最后一个符号解析之后
  分配并接受行的保留文本。经测试,该参数最多
  只能区分31个字段。
  usebackq使用后引号(键盘上数字1左面的那个键)。
  未使用参数usebackq时:fileset表示文件,但不能含有空格
  双引号表示字符串,即string
  单引号表示执行命令,即command
  使用参数usebackq时:fileset和fileset都表示文件
  当文件路径或名称中有空格时,就可以用双引号括起来
  单引号表示字符串,即string
  后引号表示命令执行,即command
  以上是用for?命令获得的帮助信息,直接复制过来的。
  晕惨了!我这就举个例子帮助大家来理解这些参数!
  For命令例1:
  echooff
  rem首先建立临时文件test。txt
  注释行,这是临时文件,用完删除test。txt
  echo11段12段13段14段15段16段test。txt
  echo21段,22段,23段,24段,25段,26段test。txt
  echo31段32段33段34段35段36段test。txt
  FORFtokens1,3delims,iin(test。txt)doechoijk
  Pause
  Deltest。txt
  运行显示结果:
  11段13段14段15段16段
  21段23段24段,25段,26段
  31段33段34段35段36段
  请按任意键继续。。。
  为什么会这样?我来解释:
  分号开头的行为注释行
  tokens1,3将每行第1段,第3段和剩余字段分别赋予变量i,j,k
  delims,(减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后
  For命令例2:
  echooff
  FORFeoldelimsiin(test。txt)doechoi
  Pause
  运行将显示test。txt全部内容,包括注释行,不解释了哈。
  For命令例3:
  另外F参数还可以以输出命令的结果看这个例子
  echooff
  FORFdelimsiin(netuser)doechoi
  pause
  这样你本机全部帐号名字就出来了把扩号内的内容用两个单引号引起来就表示那个当命令执行,FOR会返回命令的每行结果,加那个delims是为了让我空格的行能整行显示出来,不加就只显示空格左边一列!
  基本上讲完了FOR的基本用法了。。。如果你看过FOR的系统帮助,你会发现他下面还有一些特定义的变量,这些我先不讲。大家因该都累了吧!你不累我累啊。。。。
  所谓文武之道,一张一弛,现休息一下。
  第三章FOR命令中的变量
  FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法!
  先把FOR的变量全部列出来:
  I删除任何引号(),扩展I
  fI将I扩展到一个完全合格的路径名
  dI仅将I扩展到一个驱动器号
  pI仅将I扩展到一个路径
  nI仅将I扩展到一个文件名
  xI仅将I扩展到一个文件扩展名
  sI扩展的路径只含有短名
  aI将I扩展到文件的文件属性
  tI将I扩展到文件的日期时间
  zI将I扩展到文件的大小
  PATH:I查找列在路径环境变量的目录,并将I扩展
  到找到的第一个完全合格的名称。如果环境变量名
  未被定义,或者没有找到文件,此组合键会扩展到
  空字符串
  我们可以看到每行都有一个大写字母I,这个I其实就是我们在FOR带入的变量,我们FOR语句代入的变量名是什么,这里就写什么。
  比如:FORFzIN(set)DOechoz
  这里我们代入的变量名是z那么我们就要把那个I改成z,例如fI改为fz
  至于前面的p这样的内容就是语法了!
  好开始讲解:
  一、I删除任何引号(),扩展I
  这个变量的作用就如他的说明,删除引号!
  我们来看这个例子:
  首先建立临时文件temp。txt,内容如下
  1111
  2222
  3333
  444444
  555555
  可建立个BAT文件代码如下:
  echooff
  echo1111temp。txt
  echo2222temp。txt
  echo3333temp。txt
  echo444444temp。txt
  echo555555temp。txt
  rem上面建立临时文件,注意不成对的引号要加转义字符,重定向符号前不要留空格
  FORFdelimsiIN(temp。txt)DOechoi
  pause
  deltemp。txt
  执行后,我们看CMD的回显如下:
  1111字符串前的引号被删除了
  2222字符串首尾的引号都被删除了
  3333字符串前无引号,后面的引号保留
  444444字符串前面的引号删除了,而中间的引号保留
  555555字符串前面的引号删除了,而中间的引号保留
  请按任意键继续。。。
  和之前temp。txt中的内容对比一下,我们会发现第1、2、5行的引号都消失了,这就是删除引号i的作用了!
  删除引号规则如下(BAT兄补充!)
  1、若字符串首尾同时存在引号,则删除首尾的引号;
  2、若字符串尾不存在引号,则删除字符串首的引号;
  3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
  龙卷风补充:无头不删,有头连尾删。
  二、fI将I扩展到一个完全合格的路径名
  看例子:
  把代码保存放在随便哪个地方,我这里就放桌面吧。
  FORFdelimsiIN(dirb)DOechofi
  pause
  执行后显示内容如下
  C:DocumentsandSettingsAdministrator桌面est。bat
  C:DocumentsandSettingsAdministrator桌面est。vbs
  当我把代码中的fi直接改成i
  FORFdelimsiIN(dirb)DOechoi
  pause
  执行后就会显示以下内容:
  test。bat
  test。vbs
  通过对比,我们很容易就看出没有路径了,这就是将I扩展到一个完全合格的路径名的作用
  也就是如果i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来,而不只单单打印一个文件名,自己动手动实验下就知道了!
  三、dI仅将I扩展到一个驱动器号
  看例子:
  代码如下,我还是放到桌面执行!
  FORFdelimsiIN(dirb)DOechodi
  pause
  执行后我CMD里显示如下
  C:
  C:
  我桌面就两个文件test。bat,test。vbs,di作用是,如果变量i的内容是一个文件或者目录名,他就会把他这文件
  或者目录所在的盘符号打印出来!
  四、pI仅将I扩展到一个路径
  这个用法和上面一样,他只打印路径不打印文件名字
  FORFdelimsiIN(dirb)DOechopi
  pause
  我就不打结果了,大家自己复制代码看结果吧,下面几个都是这么个用法,代码给出来,大家自己看结果吧!
  五、nI仅将I扩展到一个文件名
  只打印文件名字
  FORFdelimsiIN(dirb)DOechoni
  pause
  六、xI仅将I扩展到一个文件扩展名
  只打印文件的扩展名
  FORFdelimsiIN(dirb)DOechoxi
  pause
  七、sI扩展的路径只含有短名
  打印绝对短文件名
  FORFdelimsiIN(dirb)DOechosi
  pause
  八、aI将I扩展到文件的文件属性
  打印文件的属性
  FORFdelimsiIN(dirb)DOechoai
  pause
  九、tI将I扩展到文件的日期时间
  打印文件建立的日期
  FORFdelimsiIN(dirb)DOechoti
  pause
  十、zI将I扩展到文件的大小
  打印文件的大小
  FORFdelimsiIN(dirb)DOechozi
  pause
  上面例子中的delims可以改为delims,即不要分隔符
  十一、PATH:I查找列在路径环境变量的目录,并将I扩展
  到找到的第一个完全合格的名称。如果环境变量名
  未被定义,或者没有找到文件,此组合键会扩展到
  空字符串
  这是最后一个,和上面那些都不一样,我单独说说!
  然后在把这些代码保存为批处理,放在桌面。
  echooff
  FORFdelimsiIN(notepad。exe)DOechoPATH:i
  pause
  龙卷风补充:上面代码显示结果为C:WINDOWSsystem32otepad。exe
  他的意思就在PATH变量里指定的路径里搜索notepad。exe文件,如果有notepad。exe则会把他所在绝对路径打印出来,没有就打印一个错误!
  好了,FOR的的变量就介绍到这了!
  第四章批处理中的变量
  批处理中的变量,我把他分为两类,分别为系统变量和自定义变量
  我们现在来详解这两个变量!
  一、系统变量
  他们的值由系统将其根据事先定义的条件自动赋值,也就是这些变量系统已经给他们定义了值,
  不需要我们来给他赋值,我们只需要调用而以!我把他们全部列出来!
  ALLUSERSPROFILE本地返回所有用户配置文件的位置。
  APPDATA本地返回默认情况下应用程序存储数据的位置。
  CD本地返回当前目录字符串。
  CMDCMDLINE本地返回用来启动当前的Cmd。exe的准确命令行。
  CMDEXTVERSION系统返回当前的命令处理程序扩展的版本号。
  COMPUTERNAME系统返回计算机的名称。
  COMSPEC系统返回命令行解释器可执行程序的准确路径。
  DATE系统返回当前日期。使用与datet命令相同的格式。由Cmd。exe生成。有关
  date命令的详细信息,请参阅Date。
  ERRORLEVEL系统返回上一条命令的错误代码。通常用非零值表示错误。
  HOMEDRIVE系统返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用
  户主目录是在本地用户和组中指定的。
  HOMEPATH系统返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在本地用户和组中指定的。
  HOMESHARE系统返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是
  在本地用户和组中指定的。
  LOGONSERVER本地返回验证当前登录会话的域控制器的名称。
  NUMBEROFPROCESSORS系统指定安装在计算机上的处理器的数目。
  OS系统返回操作系统名称。Windows2000显示其操作系统为WindowsNT。
  PATH系统指定可执行文件的搜索路径。
  PATHEXT系统返回操作系统认为可执行的文件扩展名的列表。
  PROCESSORARCHITECTURE系统返回处理器的芯片体系结构。值:x86或IA64基于
  Itanium
  PROCESSORIDENTFIER系统返回处理器说明。
  PROCESSORLEVEL系统返回计算机上安装的处理器的型号。
  PROCESSORREVISION系统返回处理器的版本号。
  PROMPT本地返回当前解释程序的命令提示符设置。由Cmd。exe生成。
  RANDOM系统返回0到32767之间的任意十进制数字。由Cmd。exe生成。
  SYSTEMDRIVE系统返回包含Windowsserveroperatingsystem根目录(即系统根目录)
  的驱动器。
  SYSTEMROOT系统返回Windowsserveroperatingsystem根目录的位置。
  TEMP和TMP系统和用户返回对当前登录用户可用的应用程序所使用的默认临时目录。
  有些应用程序需要TEMP,而其他应用程序则需要TMP。
  TIME系统返回当前时间。使用与timet命令相同的格式。由Cmd。exe生成。有关
  time命令的详细信息,请参阅Time。
  USERDOMAIN本地返回包含用户帐户的域的名称。
  USERNAME本地返回当前登录的用户的名称。
  USERPROFILE本地返回当前用户的配置文件的位置。
  WINDIR系统返回操作系统目录的位置。
  这么多系统变量,我们如何知道他的值是什么呢?
  在CMD里输入echoWINDIR
  这样就能显示一个变量的值了!
  举个实际例子,比如我们要复制文件到当前帐号的启动目录里就可以这样
  copyd:1。batUSERPROFILE开始菜单程序启动
  USERNAME本地返回当前登录的用户的名称。注意有空格的目录要用引号引起来
  另外还有一些系统变量,他们是代表一个意思,或者一个操作!
  他们分别是012345。。。。。。一直到9还有一个
  0这个有点特殊,有几层意思,先讲19的意思。
  1返回批处理的第一个参数
  2返回批处理的第二个参数
  39依此推类
  反回批处理参数?到底怎么个返回法?
  我们看这个例子,把下面的代码保存为test。BAT然后放到C盘下
  echooff
  echo1234
  echo1
  echo2
  echo3
  echo4
  进入CMD,输入cdc:
  然后输入test。bat我是第一个参数我是第二个参数我是第三个参数我是第四个参数
  注意中间的空格,我们会看到这样的结果:
  我是第一个参数我是第二个参数我是第三个参数我是第四个参数
  我是第一个参数
  我是第二个参数
  我是第三个参数
  我是第四个参数
  对比下代码,1就是我是第一个参数2就是我是第二个参数
  怎么样理解了吧!
  这些1和9可以让批处理也能带参数运行,大大提高批处理功能!
  还有一个他是什么呢?他的作用不是很大,只是返回参数而已,不过他是一次返回全部参数的值,不用在输入12来确定一个个的
  例子
  echooff
  echo
  同样保存为test。bat放到C盘
  进入CMD,输入cdc:
  然后输入test。bat我是第一个参数我是第二个参数我是第三个参数我是第四个参数
  可以看到他一次把全部参数都显示出来了
  好现在开始讲那个比较特殊的0
  0这个不是返回参数的值了,他有两层意思!
  第一层意思:返回批处理所在绝对路径
  例子:
  echooff
  echo0
  pause
  保存为test。BAT放在桌面运行,会显示如下结果
  C:DocumentsandSettingsAdministrator桌面est。bat
  他把当前批处理执行的所在路经打印出来了,这就是返回批处理所在绝对路径的意思
  第二层意思:无限循环执行BAT
  例子:
  echooff
  netuser
  0
  保存为BAT执行,他就会无限循环执行netuser这条命令,直到你手动停止。
  龙卷风补充:其实0就是第一参数1前面那个参数,当然就是批处理文件名(包括路径)。
  以上就是批处理中的一些系统变量,另外还有一些变量,他们也表示一些功能,
  FOR命令中的那些就是,FOR变量已经说过,就不讲了。
  二、自定义变量
  故名思意,自定义变量就是由我们来给他赋予值的变量
  要使用自定义变量就得使用set命令了,看例子。
  echooff
  setvar我是值
  echovar
  pause
  保存为BAT执行,我们会看到CMD里返回一个我是值
  var为变量名,号右变的是要给变量的值
  这就是最简单的一种设置变量的方法了
  如果我们想让用户手工输入变量的值,而不是在代码里指定,可以用用set命令的p参数
  例子:
  echooff
  setpvar请输入变量的值
  echovar
  pause
  var变量名号右边的是提示语,不是变量的值
  变量的值由我们运行后自己用键盘输入!
  一、交互界面设计
  没啥说的,看看高手设计的菜单界面吧:
  echooff
  cls
  title终极多功能修复
  :menu
  cls
  color0A
  echo。
  echo
  echo请选择要进行的操作,然后按回车
  echo
  echo。
  echo1。网络修复及上网相关设置,修复IE,自定义屏蔽网站
  echo。
  echo2。病毒专杀工具,端口关闭工具,关闭自动播放
  echo。
  echo3。清除所有多余的自启动项目,修复系统错误
  echo。
  echo4。清理系统垃圾,提高启动速度
  echo。
  echoQ。退出
  echo。
  echo。
  :cho
  setchoice
  setpchoice请选择:
  IFNOTchoiceSETchoicechoice:0,1
  ifichoice1gotoip
  ifichoice2gotosetsave
  ifichoice3gotokaiji
  ifichoice4gotoclean
  ifichoiceQgotoendd
  echo选择无效,请重新输入
  echo。
  gotocho
  只要学完本教程前面的章节,上面的程序应该能看懂了。
  二、ifelse条件语句
  前面已经谈到,DOS条件语句主要有以下形式
  IF〔NOT〕ERRORLEVELnumbercommand
  IF〔NOT〕string1string2command
  IF〔NOT〕EXISTfilenamecommand
  增强用法:IF〔I〕string1compareopstring2command
  增强用法中加上I就不区分大小写了!
  增强用法中还有一些用来判断数字的符号:
  EQU等于
  NEQ不等于
  LSS小于
  LEQ小于或等于
  GTR大于
  GEQ大于或等于
  上面的command命令都可以用小括号来使用多条命令的组合,包括else子句,组合命令中可以嵌套使用条件或循环命令。
  例如:
  IFEXISTfilename(
  delfilename
  )ELSE(
  echofilenamemissing
  )
  也可写成:
  ifexistfilename(delfilename)else(echofilenamemissing)
  但这种写法不适合命令太多或嵌套命令的使用。
  三、循环语句
  1、指定次数循环
  FORLvariableIN(start,step,end)DOcommand〔commandparameters〕
  组合命令:
  FORLvariableIN(start,step,end)DO(
  Command1
  Command2
  )
  2、对某集合执行循环语句。
  FORvariableIN(set)DOcommand〔commandparameters〕
  variable指定一个单一字母可替换的参数。
  (set)指定一个或一组文件。可以使用通配符。
  command对每个文件执行的命令,可用小括号使用多条命令组合。
  FORR〔〔drive:〕path〕variableIN(set)DOcommand〔commandparameters〕
  检查以〔drive:〕path为根的目录树,指向每个目录中的
  FOR语句。如果在R后没有指定目录,则使用当前
  目录。如果集仅为一个单点(。)字符,则枚举该目录树。
  同前面一样,command可以用括号来组合:
  FORR〔〔drive:〕path〕variableIN(set)DO(
  Command1
  Command2
  commandn
  )
  3、条件循环
  上面的循环结构是用for命令来实现的,for命令循环有一个缺点,就是整个循环被当作一条命令语句,涉及到变量延迟的问题。
  利用goto语句和条件判断,dos可以实现条件循环,很简单啦,看例子:
  例:
  echooff
  setvar0
  rem循环开始了
  :continue
  setavar1
  echo第var次循环
  ifvarlss100gotocontinue
  rem循环结束了
  echo循环执行完毕
  pause
  例:
  echooff
  setvar100
  rem循环开始了
  :continue
  echo第var次循环
  setavar1
  ifvargtr0gotocontinue
  rem循环结束了
  echo循环执行完毕
  pause
  四、子程序
  在批处理程序中可以调用外部可运行程序,比如exe程序,也可调用其他批处理程序,这些也可以看作子程序,但是不够方便,如果被调用的程序很多,就显得不够简明了,很繁琐。
  在windowsXP中,批处理可以调用本程序中的一个程序段,相当于子程序,这些子程序一般放在主程序后面。
  子程序调用格式:
  CALL:labelarguments
  子程序语法:
  :label
  command1
  command2
  。。。。。。
  commandn
  goto:eof
  在子程序段中,参数0指标签:label
  子过程一般放在最后,并且注意在主程序最后要加上exit或跳转语句,避免错误的进入子过程。
  子程序和主程序中的变量都是全局变量,其作用范围都是整个批处理程序。
  传至子程序的参数在call语句中指定,在子程序中用1、2至9的形式调用,而子程序返回主程序的数据只需在调用结束后直接引用就可以了,当然也可以指定返回变量,请看下面的例子。
  子程序例1:
  echooff
  call:subreturn你好
  echo子程序返回值:return
  pause
  :sub
  set12
  goto:eof
  运行结果:你好
  子程序例2:设计一个求多个整数相加的子程序
  echooff
  setsum0
  call:subsum102035
  echo数据求和结果:sum
  pause
  :sub
  rem参数1为返回变量名称
  seta112
  shift2
  ifnot2gotosub
  goto:eof
  运行结果:65
  五、用ftp命令实现自动下载
  ftp是常用的下载工具,ftp界面中有40多个常用命令,自己学习了,不介绍了。这里介绍如何用dos命令行调用ftp命令,实现ftp自动登录,并上传下载,并自动退出ftp程序。
  其实可以将ftp命令组合保存为一个文本文件,然后用以下命令调用即可。
  ftpns:〔〔drive:〕path〕filename
  上面的filename为ftp命令文件,包括登录IP地址,用户名、密码、操作命令等
  例:
  open90。52。8。3打开ip
  useriware用户为iware
  password8848密码
  bin二进制传输模式
  prompt
  cdtmp1切换至iware用户下的tmp1目录
  pwd
  lcdd:download本地目录
  mget下载tmp1目录下的所有文件
  bye退出ftp
  六、用7ZIP实现命令行压缩和解压功能
  语法格式:(详细情况见7zip帮助文件,看得头晕可以跳过,用到再学)
  7z〔。。。〕〔。。。〕
  7z。exe的每个命令都有不同的参数,请看帮助文件
  为压缩包名称
  为文件名称,支持通配符或文件列表
  其中,7z是至命令行压缩解压程序7z。exe,是7z。exe包含的命令,列举如下:
  a:Addsfilestoarchive。添加至压缩包
  a命令可用参数:
  i(Include)
  m(Method)
  p(SetPassword)
  r(Recurse)
  sfx(createSFX)
  si(useStdIn)
  so(useStdOut)
  ssw(Compresssharedfiles)
  t(Typeofarchive)
  u(Update)
  v(Volumes)
  w(WorkingDir)
  x(Exclude)
  b:Benchmark
  d:Deletesfilesfromarchive。从压缩包中删除文件
  d命令可用参数:
  i(Include)
  m(Method)
  p(SetPassword)
  r(Recurse)
  u(Update)
  w(WorkingDir)
  x(Exclude)
  e:Extract解压文件至当前目录或指定目录
  e命令可用参数:
  ai(Includearchives)
  an(Disableparsingofarchivename)
  ao(Overwritemode)
  ax(Excludearchives)
  i(Include)
  o(SetOutputDirectory)
  p(SetPassword)
  r(Recurse)
  so(useStdOut)
  x(Exclude)
  y(AssumeYesonallqueries)
  l:Listscontentsofarchive。
  t:Test
  u:Update
  x:eXtractwithfullpaths用文件的完整路径解压至当前目录或指定目录
  x命令可用参数:
  ai(Includearchives)
  an(Disableparsingofarchivename)
  ao(Overwritemode)
  ax(Excludearchives)
  i(Include)
  o(SetOutputDirectory)
  p(SetPassword)
  r(Recurse)
  so(useStdOut)
  x(Exclude)
  y(AssumeYesonallqueries)
  七、调用VB程序
  使用Windows脚本宿主,可以在命令提示符下运行脚本。C。exe提供了用于设置脚本属性的命令行开关。
  用法:C脚本名称〔脚本选项。。。〕〔脚本参数。。。〕
  选项:
  B批模式:不显示脚本错误及提示信息
  D启用ActiveDebugging
  E:engine使用执行脚本的引擎
  H:C将默认的脚本宿主改为C。exe
  H:W将默认的脚本宿主改为W。exe(默认)
  I交互模式(默认,与B相对)
  Job:xxxx执行一个WSF工作
  Logo显示徽标(默认)
  Nologo不显示徽标:执行时不显示标志
  S为该用户保存当前命令行选项
  T:nn超时设定秒:允许脚本运行的最长时间
  X在调试器中执行脚本
  U用Unicode表示来自控制台的重定向IO
  脚本名称是带有扩展名和必需的路径信息的脚本文件名称,如d:adminvbschart。vbs。
  脚本选项和参数将传递给脚本。脚本参数前面有一个斜杠()。每个参数都是可选的;但不能在未指定脚本名称的情况下指定脚本选项。如果未指定参数,则C将显示C语法和有效的宿主参数。
  八、将批处理转化为可执行文件:
  由于批处理文件是一种文本文件,任何人都可以对其进行随便编辑,不小心就会把里面的命令破坏掉,所以如果将其转换成。com格式的可执行文件,不仅执行效率会大大提高,而且不会破坏原来的功能,更能将优先级提到最高。Bat2Com就可以完成这个转换工作。
  小知识:在DOS环境下,可执行文件的优先级由高到低依次为。com。exe。bat。cmd,即如果在同一目录下存在文件名相同的这四类文件,当只键入文件名时,DOS执行的是name。com,如果需要执行其他三个文件,则必须指定文件的全名,如name。bat。
  这是一个只有5。43K大小的免费绿色工具,可以运行在纯DOS或DOS窗口的命令行中,用法:Bat2Com
  FileName,这样就会在同一目录下生成一个名为FileNme。com的可执行文件,执行的效果和原来的。bat文件一样。
  九、时间延迟
  本条参考引用〔英雄〕教程
  什么是时间延迟?顾名思义,就是执行一条命令后延迟一段时间再进行下一条命令。
  延迟的应用见下节:模拟进度条。
  1、利用ping命令延时
  例:
  echooff
  echo延时前:time
  pingn3127。0。0。1nul
  echo延时后:time
  pause
  解说:用到了ping命令的n参数,表示要发送多少次请求到指定的ip。本例中要发送3次请求到本机的ip(127。0。0。1)。127。0。0。1可简写为127。1。nul就是屏蔽掉ping命令所显示的内容。
  2、利用for命令延时
  例:
  echooff
  echo延时前:time
  forliin(1,1,5000)doechoinul
  echo延时后:time
  pause
  解说:原理很简单,就是利用一个计次循环并屏蔽它所显示的内容来达到延时的目的。
  3、利用vbs延迟函数,精确度毫秒,误差1000毫秒内
  例:
  echooff
  echotime
  call:delay5000
  echotime
  pause
  exit
  :delay
  echoW。Sleep1delay。vbs
  CBdelay。vbs
  deldelay。vbs
  goto:eof
  运行显示:
  10:44:06。45
  10:44:11。95
  请按任意键继续。。。
  上面的运行结果显示实际延时了5500毫秒,多出来的500毫秒时建立和删除临时文件所耗费的时间。误差在一秒之内。
  4、仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内
  仅用批处理命令就可以实现延迟操作。
  例:
  echooff
  setpdelay请输入需延迟的毫秒数:
  setTotalTime0
  setNowTimetime
  ::读取起始时间,时间格式为:13:01:05。95
  echo程序开始时间:NowTime
  :delaycontinue
  setaminute11NowTime:3,2100
  ::读取起始时间的分钟数
  setasecond11NowTime:5,2NowTime:20100000
  ::将起始时间的秒数转为毫秒
  setNowTimetime
  setaminute21NowTime:3,2100
  ::读取现在时间的分钟数
  setasecond21NowTime:5,2NowTime:20100000
  ::将现在时间的秒数转为毫秒
  setaTotalTime(minute2minute160)6060000second2second1
  ifTotalTimelssdelaygotodelaycontinue
  echo程序结束时间:time
  echo设定延迟时间:delay毫秒
  echo实际延迟时间:TotalTime毫秒
  pause
  运行显示:
  请输入需延迟的毫秒数:6000
  程序开始时间:15:32:16。37
  程序结束时间:15:32:22。37
  设定延迟时间:6000毫秒
  实际延迟时间:6000毫秒
  请按任意键继续。。。
  实现原理:首先设定要延迟的毫秒数,然后用循环累加时间,直到累加时间大于等于延迟时间。
  误差:windows系统时间只能精确到10毫秒,所以理论上有可能存在10毫秒误差。
  经测试,当延迟时间大于500毫秒时,上面的延迟程序一般不存在误差。当延迟时间小于500毫秒时,可能有几十毫秒误差,为什么?因为延迟程序本身也是有运行时间的,同时系统时间只能精确到10毫秒。
  为了方便引用,可将上面的例子改为子程序调用形式:
  echooff
  echo程序开始时间:Time
  call:delay10
  echo实际延迟时间:totaltime毫秒
  echo程序结束时间:time
  pause
  exit
  ::以下为延时子程序
  :delay
  echooff
  if1goto:eof
  setDelayTime1
  setTotalTime0
  setNowTimetime
  ::读取起始时间,时间格式为:13:01:05。95
  :delaycontinue
  setaminute11NowTime:3,2100
  setasecond11NowTime:5,2NowTime:20100000
  setNowTimetime
  setaminute21NowTime:3,2100
  setasecond21NowTime:5,2NowTime:20100000
  setaTotalTime(minute2minute160)6060000second2second1
  ifTotalTimelssDelayTimegotodelaycontinue
  goto:eof
  十、模拟进度条
  下面给出一个模拟进度条的程序。如果将它运用在你自己的程序中,可以使你的程序更漂亮。
  echooff
  modeconcols113lines15color9f
  cls
  echo。
  echo程序正在初始化。。。
  echo。
  echo
  setpnul
  forLiin(1138)dosetpanulpingn1127。0。0。1nul
  echo100
  echo
  pause
  解说:setpanul的意思是:只显示提示信息且不换行,也不需手工输入任何信息,这样可以使每个在同一行逐个输出。pingn0127。1nul是输出每个的时间间隔,即每隔多少时间输出一个。
  十一、特殊字符的输入及应用
  开始运行输入cmdeditctrlp(意思是允许输入特殊字符)按ctrla将会显示笑脸图案。
  (如果要继续输入特殊字符请再次按ctrlp,然后ctrl某个字母)
  以上是特殊字符的输入方法,选自〔英雄〕教程,很管用的。也就是用编辑程序edit输入特殊字符,然后保存为一文本文件,再在windows下打开此文件,复制其中的特殊符号即可。
  一些简单的特殊符号可以在dos命令窗口直接输入,并用重定向保存为文本文件。
  例:
  C:ECHOGtemp。txt
  G是用CtrlG或Alt007输入,输入多个G可以产生多声鸣响。
  特殊字符的应用也很有意思,这里仅举一例:退格键
  退格键表示删除左边的字符,此键不能在文档中正常输入,但可以通过edit编辑程序录入并复制出来。即。
  利用退格键,可以设计闪烁文字效果
  例:文字闪烁
  echooff
  :start
  setp床前明月光nul
  ::显示文字,光标停于行尾
  pingn0127。0。0。1nul
  ::设置延迟时间
  setpanul
  ::输出一些退格符将光标置于该行的最左端(退格符的数量可以自己调整)。
  setpanul
  ::输出空格将之前输出的文字覆盖掉。
  setpanul
  ::再次输出退格符将光标置于该行的最左端,这里的退格符数量一定不能比前面的空格数少。
  ::否则光标不能退到最左端。
  gotostart
  例:输出唐诗一首,每行闪动多次
  echooff
  setlocalenabledelayedexpansion
  setstr床前明月光疑是地上霜举头望明月低头思故乡
  ::定义字符串str
  foriin(str)do(
  rem由于str中含有空格,则以空格为分隔符将str中的每一个部分依次赋给变量i。
  setchari
  echo。
  echo。
  forljin(0,1,5)do(
  setp!char:j,1!nul
  rem依次取出变量char中的每一个字符,并显示。
  pingn0127。0。0。1nul
  rem设置输出每个字符的时间延迟。
  )
  call:heroi
  )
  pausenul
  exit
  :hero
  forlkin(1,1,10)do(
  pingn0127。0。0。1nul
  setpanul
  setpanul
  setpanul
  pingn0127。0。0。1nul
  setpa1nul
  )
  ::文字闪动
  goto:eof
  十二、随机数(random)的应用技巧
  RANDOM系统变量返回0到32767之间的任意十进制数字。由Cmd。exe生成。
  2的15次方等于32768,上面的032767实际就是15位二进制数的范围。
  那么,如何获取100以内的随机数呢?很简单,将RANDOM按100进行求余运算即可,见例子。
  例:生成5个100以内的随机数
  echooff
  setlocalenabledelayedexpansion
  forLiin(115)do(
  setarandomNum!random!100
  echo随机数:!randomNum!
  )
  pause
  运行结果:(每次运行不一样)
  随机数:91
  随机数:67
  随机数:58
  随机数:26
  随机数:20
  请按任意键继续。。。
  求余数运算setarandomNum!random!100中的100可以是132768之间的任意整数。
  总结:利用系统变量random,求余数运算,字符串处理等,可以实现很多随机处理。
  思考题目:生成给定位数的随机密码
  解答思路:将26个英文字母或10数字以及其它特殊字符组成一个字符串,随机抽取其中的若干字符。
  参考答案1:(简单)
  echooff
  call:randomPassword5pass1pass2
  echopass1pass2
  pause
  exit
  :randomPassword
  ::生成随机密码
  ::1为密码长度,2及以后为返回变量名称
  ::for命令最多只能区分31个字段
  echooff
  setpasswordlen1
  ifnotdefinedpasswordlengoto:eof
  ifpasswordlenlss1goto:eof
  setwordsetabcdefghijklmnopqrstuvwxyz
  setreturn
  setnum0
  :randomPassword1
  setanum1
  setanumofrandom261
  forftokensnumofdelimsiin(wordset)dosetreturnreturni
  ifnumlsspasswordlengotorandomPassword1
  ifnot2set2return
  shift2
  ifnot2gotorandomPassword
  goto:eof
  参考答案2:(最优)
  echooff
  call:randomPassword6pass1pass2pass3
  echopass1pass2pass3
  pause
  exit
  :randomPassword
  ::生成随机密码
  ::1为密码长度,2及以后为返回变量名称
  ::goto循环、变量嵌套、命令嵌套
  echooff
  if1goto:eof
  if1lss1goto:eof
  setpasswordlen1
  setreturn
  setwordsetabcdefghijklmnopqrstuvwxyz023456789
  ::循环
  :randomPassword1
  setanumofrandom36
  callsetreturnreturnwordset:numof,1
  setapasswordlen1
  ifpasswordlengtr0gotorandomPassword1
  ::循环
  ifnot2set2return
  shift2
  ifnot2gotorandomPassword
  goto:eof
  说明:本例涉及到变量嵌套和命令嵌套的应用,见后。
  十三、变量嵌套与命令嵌套
  和其它编程语言相比,dos功能显得相对简单,要实现比较复杂的功能,需要充分运用各种技巧,变量嵌套与命令嵌套就是此类技巧之一。
  先复习一下前面的字符串截取的关键内容:
  截取功能统一语法格式为:a:〔m〔,n〕〕
  方括号表示可选,为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号可以简单理解为偏移即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)。
  百分号如果需要当成单一字符,必须写成
  以上是dos变量处理的通用格式,如果其中的m、n为变量,那么这种情况就是变量嵌套了。
  比如设变量word为abcdefghij,变量num为123456789
  word:4,1为e,其中4可以从变量num中取值,即num:3,1,写成组合形式如下:
  word:num:3,1,1经测试这种写法不能正确执行,写成word:(num:3,1),1同样不行,那么,怎么实现这种变量嵌套呢?这就必须结合命令嵌套。
  什么是命令嵌套呢?简单的说,首先用一条dos命令生成一个字符串,而这个字符串是另一条dos命令,用call语句调用字符串将其执行,从而得到最终结果。
  例:用call语句实现命令嵌套
  echooff
  setstr1aaaechookbbb
  echo初始字符串:str1
  echo生成命令字符串如下:
  echostr1:4,7
  echo运行命令字符串生成最终结果为:
  callstr1:4,7
  pause
  运行显示:
  初始字符串:aaaechookbbb
  生成命令字符串如下:
  echook
  运行命令字符串生成最终结果为:
  ok
  请按任意键继续。。。
  出处:https:www。cnblogs。commq0036p3412171。html
投诉 评论 转载

什么是私域流量?私域流量是什么?为什么要做私域流量?私域流量的载体有哪些?如何玩转私域流量?本文笔者将从这四个方面来与大家分析下私域流量。为什么私域流量突然被广大公司提起,其势头还很可能……BAT批处理脚本教程BAT批处理脚本教程第一章批处理基础第一节常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名……恒大汽车已获得授权专利1355件中证网讯(记者崔小粟)5月12日,恒大汽车发布公告,截至本公告日,恒大新能源汽车集团(含下属企业)在中国及国外总共申请专利3012件,其中已获得授权专利1355件,这些专利涵盖……茅台在中国股市是什么样的存在?茅台股价几乎一直再涨,市值最高时在三万多亿人民币。茅台股市表现为什么这么好?因为它是中国股市最契合巴菲特价值投资理念的公司。茅台拥有深广的护城河,给你再多的钱也没法……高通骁龙888Plus将加速高端5G手机的游戏和人工智能它将在2021年第三季度到达设备。莎拉蒂布肯太平洋时间2021年6月28日凌晨3:15高通的骁龙888Plus将于今年晚些时候用于手机。高通手机的速度正……轻至960g惠普星13Air是如何做到的惠普最近发力很不错,星13Air最近就十分火,这款号称轻至960g,为何能够做到这么轻呢?我们今天一起来探究一下。首先我们要解决一个问题:一款笔记本到底是怎么做轻的?……智能助理透露ColorOS12将于9月13日发布OPPORe智能助理透露:ColorOS12将于9月13日发布OPPOReno7Pro曝光继OPPO发布了OPPOFindX3系列之后,虽然还发布了包括第二代智能手表等Iot产品,但……5G时代还需要光纤吗?5G时代核心网到基站的光纤还是要有的,但是入户的光纤可以被替代。我们现在家里上网很多时候是电信局拉一根光纤入户,然后配合光猫和无线路由器变成WiFi信号。5G时代家里上网……蚁起悦暖冬元气新出行奇瑞新能源约惠不停随着早冬的来临,金九银十销售旺季逐步接近尾声,这也让车企鏖战的喧闹告一段落。在这场销量争夺赛中,奇瑞新能源不负众望地迎来金秋硕果,凭借时尚精致的颜值和出色的产品力表现,奇瑞小蚂……Android开发为什么除Flutter之外,还需要另一个跨编译:核子可乐、燕珊不久前,谷歌正式推出JetpackCompose1。0版本。近日,JetBrains在此基础上发布了ComposeMultiplatformAlpha……北京多次违规停放用户将被限制使用来源:北京青年报为解决互联网租赁自行车(即共享单车)乱停乱放问题,进一步引导用户形成禁停区不停车、入栏管理区停车入栏、其他区域有序停放的良好习惯,昨日,由北京市自行车电动……山灵播放器怎么样,山灵播放器好吗,山灵播放器值得购买吗山灵播放器还是不错的,非常好用,可参考下面对山灵播放器试用点评和感受。本人算音频爱好者,工作原因多选移动设备。大约20年前入手第一块砖,港货,稍可满足。10年前先后入手爱……
华为发布鸿蒙系统,高通急着恢复供货iPhone12在充电时出现闪电接口检测到液体的提示怎么办?好用的国产入门实时操作系统Oneos芯片去美化加速!中芯国际联合高校发力,华为有救了?表情包自取国产老手机品牌发布新机,自研系统CoolOS,支持90天换机javascript核心知识(五)面向对象(中)数据属性描述HDFS为何在大数据领域经久不衰?安卓之光怒降1500,为何受伤的总是抢首发用户?三箭齐发,红米K50系列再次被确认空调质量排行榜前十名有哪些?没想到,真正解决电动汽车续航焦虑的竟然不是续航里程

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利