Windows批处理⽂件bat
⼀、⽂本
1.注释
::和rem都表⽰注释和c++中的//⼀样
@echo off关闭回显(回显就是将命令语句显⽰到控制台),@就是让后⾯的语句不显⽰,此处就是不显⽰echo off
⽰例:
@echo off
rem  这是注释
::这是注释
echo Hello World
pause
@echo on
2.修改控制台输出字符颜⾊
color 颜⾊例如color 01,01:蓝⾊,02:绿⾊,04:红⾊
3.字符串处理
替换
set var1=teststring批处理文件怎么做
set var2=%var1:test=mmm%
::var2=mmmstring,⽤mmm替换test
合并
set a=aaa
set b=bbb
set c=%a%%b%
::c=aaabbb
4.bat⽂件中⽂乱码
将bat⽂件编码格式改为ANSI
⼆、for循环
1.语法:
在cmd窗⼝中:for %I in (command1) do command2
在批处理⽂件中:for %%I in (command1) do command2
之所以要区分cmd窗⼝和批处理⽂件两种环境,是因为在这两种环境下,命令语句表现出来的⾏为虽然基本⼀样,但是在细节上还是稍有不同,最明显的⼀个差异就是:在cmd窗⼝中,for之后的形式变量I必须使⽤单百分号引⽤,即%I;⽽在批处理⽂件中,引⽤形
式变量I必须使⽤双百分号,即%%I。为了⽅便起见,若不是特别强调,以下的讲解都以批处理⽂件环境为例。
2.关键字
for、in和do是for语句的关键字,它们三个缺⼀不可;
%%I是for语句中对形式变量的引⽤,即使变量l在do后的语句中没有参与语句的执⾏,也是必须出现的;
in之后,do之前的括号不能省略;in之后必须有⼀个空格
command1表⽰字符串或变量,command2表⽰字符串、变量或命令语句;
3.⽰例Demo1
@echo off
for  %%I in (ABC) do echo %%I
pause
保存为.bat⽂件(批处理⽂件)并执⾏,将会在弹出的批处理窗⼝中看到这样的信息:
4.注意事项:
for语句的形式变量I,可以换成26个字母中的任意⼀个,这些字母会区分⼤⼩写,也就是说,%%I和%%i会被认为不是同⼀个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发⽣冲突,请不要随意把%%I替换为%%0~%%9中的任意⼀个;
in和do之间的command1表⽰的字符串或变量可以是⼀个,也可以是多个,每⼀个字符串或变量,我们称之为⼀个元素,每个元素之间,⽤空格键、跳格键(Tab)、逗号、分号或等号分隔;
for语句依次提取command1中的每⼀个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执⾏;并且每次只提取⼀个元素,然后执⾏⼀次do后的命令语句,⽽⽆论这个元素是否被带到command2中参与了command2的运⾏;当执⾏完⼀次do后的语句之后,再提取command1中的下⼀个元素,再执⾏⼀次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for
语句才宣告执⾏结束。
5.⽰例Demo2
@echo off
for  %%I in (A,B,C) do echo %%I
pause
运⾏结果如下:
如果把 bbs.bathome 这个字符串中的点号换为空格、跳格或等号,执⾏结果将和demo2的执⾏结果别⽆⼆致。
6.Demo2代码中for语句的执⾏过程:
1. for语句以逗号为分隔符,把 A,B,C 这个字符串切分成三个元素:A、B和C,由此决定了do后的语句将会被执⾏3次;
2. 第⼀次执⾏过程是这样的:先把 bbs 这个字符串作为形式变量I的值,带⼊do后的语句中加以执⾏,也就是执⾏ echo %%I 语句,此时
的I值为A,因此,第⼀次执⾏的结果,将会在屏幕上显⽰A这个字符串;第⼆次执⾏和第⼀次执⾏的过程是⼀样的,只不过此时I的值已经被替换为command1中的第⼆个元素了,也就是 B 这个字符串;如此循环,当第三次echo执⾏完毕之后,整条for语句才算执⾏完毕,此时,将执⾏下⼀条语句,也就是pause命令。
7.⾼级⽤法:
搜索当前⽬录下有哪些⽂件
@echo off
for %%i in (*.*) do echo "%%i"
pause
搜索当前⽬录下所有的⽂本⽂件
@echo off
for %%i in (*.txt) do echo "%%i"
pause
8.for语法⽰例
for /f,f=file,对⽂件内容进⾏操作,对⽂件名操作需要配合dir /a-d /b
读⽂件内容
@echo off
for /f %%I in (t1.txt) do echo %%I
pause
显⽰当前⽬录下所有⽂件名含有字符串test的⽂件
@echo off
for /f %%I in ('dir /a-d /b *test*.*') do echo %%I
pause
for /r,r=recursion,递归,对⽂件夹进⾏操作,for /r和dir /ad /b /s有⾮常类似的效果
显⽰当前⽬录及所有⼦⽬录
@echo off
for /r %%i in (.) do echo %%i
pause
for /d,d=directory,处理⽂件夹
显⽰当前⽬录下所有以f开头的⽂件夹
@echo off
for /d %%i in (f*) do echo %%i
pause
for /l,l=loop,⾼级循环
语法:for /l %variable in (start,step,end) do command [command-parameters]
解释:
start指起始值;step指步间距;end指终⽌值。
start、step和end都只能取整数(正负皆可)。
步间距step的值不能为0。
当步间距step的值为正整数时,终⽌值end不能⼩于初始值start。
当步间距step的值为负整数时,终⽌值end不能⼤于初始值start。
具体含义:从start开始计数,以step为步长,直⾄最接近end的那个整数值为⽌,这之间有多少个数,do后的语句就执⾏多少次。
⽰例:for /l %%I in (1 2 10) do echo %%I,打印从1开始步长为2,直到10为⽌的数,即打印13579
三、set⽤法
1.⽰例1
@echo off
set var= this is a string
echo %var%
pause
⽤法说明
set是命令,var是变量名,=右边的"this is a string"是变量的值。在批处理中我们要引⽤这个变量,就把var变量名⽤两个%(百分号)扩起来,如%var%
如果需要输⼊变量的值,只需给set加⼀个参数/p,例如:set /p var=please input:,输⼊完成后按Enter结束,此时var的值就是输⼊的值2.⽰例2
@echo off
set /p var=please input:
echo The input is:%var%
pause
3.⽰例3
@echo off
set var=abbccdde
echo before:%var%
set var1=%var:cc=xx%
echo after:%var1%
pause
四、if⽤法
1.判断⽂件是否存在
@echo off
if exist "test.bat" (echo yes) else (echo no)
pause
注意:如果test.bat⽂件存在则输出yes,否则输出no,⽂件名必须⽤""括起来,⽂件名之后必须有⼀个空格,else两边也必须都有空格。
2.判断输⼊的值是否符合预期
@echo off
set /p var=input:
if %var%==y (echo yes) else (echo no)
pause
如果输⼊的是y则输出yes否则输出no
五、调⽤
1.call
call命令⼀般从⼀个批处理脚本中调⽤另⼀个批处理脚本。
2.start
start命令启动单独的控制台窗⼝来运⾏指定程序或命令。如果在没有参数的情况下使⽤,start 将打开第⼆个命令提⽰符窗⼝。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。