我的第二个批处理

By 甘小蔗    2018/02/24

目录 涉及指令
FirstBat@ , echo , title , pause

MySecondBat.bat:

  1. @echo off
  2. title 我的第二个批处理
  3. color E4
  4. echo,请输入一个数字,我会输出在它后面的五个数字
  5. set /p num=
  6. echo,值"%num%"后面五个数字为:
  7. set /a xnum=%num%+5
  8. :loop
  9. set /a num+=1
  10. echo,%num%
  11. if %num% lss %xnum% goto :loop
  12. echo,按G键退出&pause>nul&exit

将以上代码复制在记事本后,将后缀.txt改为.bat,执行后效果为:

甘小蔗批处理教程-我的第一个批处理


color

设置控制台的背景色和文字颜色

语法:color [attr]

color的 [attr] 颜色属性由两个十六进制数值组成,第一个为背景 ,第二个为文字颜色。数值对应的颜色如下表所示:

0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色

另外,[attr]中数值间不能有空格噢,如color 04color 0 4。这里还有一个命令与color通常一并出现,用来设置控制台的宽和高,它就是mode


mode

设置控制台窗口大小

语法:mode con [:] [cols=w][lines=n]

mode con: cols=72 lines=25,设置控制台宽度为72列,长度为25行。当然也可以不要:,代码为mode con cols=72 lines=25

另外,经过 mode 设置过窗口大小后,不会出现滚动条,超出内容会自动隐藏。如果内容过多,窗口又不足以容下它们,那么就会无法全部显示的结果。

PS:mode的功能不止设置控制台大小,还可以显示代码页、改变键盘速度及延迟等等


set

一:赋值自定义变量

语法:set [variable=[string]]

set x=你好~ 我是字母X,等号右边内容全部都会赋值到x变量上,通过echo %x%,输出为:你好~ 我是字母X。需要注意的是:set不允许变量名含有等号。

如有几个变量需要赋的值都是一样的,我们不需要一个一个去赋值,可以用set A=B=C=D=[string]的方式,一并赋值。

如要将a,b,c,d变量赋值0,代码为set a=b=c=d=0

此外,批处理对变量名大小写并不重视,如%num%、%Num%、%nUm%是相等的,至少在批处理眼里。不过它也有视力好的时候,每当 for 语句出现,就变得对循环变量大小写格外敏感了,似乎只有它是亲生的吧。例如:for /l %%a in (1,1,5) echo %%A是不行的。

另外悄悄告诉你,批处理对变量的值的大小写一直都很敏感哦


二:读入并赋值到自定义变量

语法:set /p variable=[promptString]

/p 命令行开关允许将变量数值设成用户输入的值。如:

  1. @echo off
  2. set /p userName=请输入你的昵称:
  3. echo 您的用户昵称为"%userName%"
  4. pause>nul&exit

运行上诉代码,(02)会提示“请输入你的昵称:”,若输入FAQ,(03)会显示“您的用户昵称为"FAQ"”


三:运算

语法:set /a expression

/a 命令行开关指定等号右边的字符串为待计算的数字表达式。通俗的来讲,就是让set可以支持数学符号进行运算。所有需要进行计算的表达式,都必须添加/a开关。否则无法运算。

另外在DOS中,计算只能精确到整数,小数采用四舍五入;计算的有效值范围是-2147483647至2147483647,超出无效。


if

条件处理

语法:

IF [not] string1 operator string2 command
IF [not] EXIST filename command IF [not] DEFINED filename command

[not] 指定只有条件为false的情况下,才运行command。

if主要用来判断:1.两个数值之间的关系;2.两个字符串是否相等;3.指定文件是否存在。

有时候,还可以结合errorlevel(环境变量)使用。关于环境变量,它的初始值为0,当一些命令执行不成功,就会返回一个数值,如1或2...

程序栗子:

  1. @echo off
  2. md C:\Temp
  3. if %ERRORLEVEL%==1 echo,目录创建失败
  4. if %ERRORLEVEL%==0 echo,成功创建目录
  5. pause>nul&exit

运行后如果成功在C盘下创建了Temp文件夹,则显示“成功创建目录”;若创建失败(包括该文件已经存在导致的失败),则会显示“目录创建失败”

若用判断驱动器、文件或文件夹是否存在的方式,代码如下:

  1. @echo off
  2. if exist C:\Temp (echo,Temp目录已经存在,无法创建) else (md C:\Temp&echo,成功创建目录)
  3. pause>nul&exit

如需判定是否玩家是否输入内容,即可用not defined

  1. @echo off
  2. :redow
  3. cls&echo,请输入或拖入存放文件夹位置
  4. set /p wjj=
  5. if not defined wjj (echo,你没有输入任何内容&ping /n 2 127.1 >nul&goto :redow)
  6. echo,文件将会存于%wjj%
  7. pause>nul&exit

而本文中的MySecondBat则是使用的if中的检测数值,其中比较运算符有:

  1. equ - 等于
  2. neq - 不等于
  3. lss - 少于
  4. leq - 少于或等于
  5. gtr - 大于
  6. geq - 大于或等于

goto

跳转命令(无需条件)

语法:goto [Tag]

[Tag] 为批处理程序中用作标签的文字字符串,可自定义。

标签必须单独一行,并且以冒号打头。所以goto和:分不开,当程序运行到goto时,将直接跳转到:定义的部分开始执行。如:

  1. @echo off
  2. :runByRun
  3. set /a var+=1
  4. echo %var%
  5. if %var% leq 3 goto runByRun
  6. pause>nul&exit

运行后逐行显示1,2,3,4