Windows脚本bat编程基础Word格式.docx
《Windows脚本bat编程基础Word格式.docx》由会员分享,可在线阅读,更多相关《Windows脚本bat编程基础Word格式.docx(26页珍藏版)》请在冰点文库上搜索。
![Windows脚本bat编程基础Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/510e19f2-a408-4e10-bbd6-0fcb8b05dfa0/510e19f2-a408-4e10-bbd6-0fcb8b05dfa01.gif)
”/[\]+等任一符号替代。
命令ECHO.输出的回车,经DOS管道转向可以作为其它命令的输入,比如echo.|time即相当于在TIME命令执行后给出一个回车。
所以执行时系统会在显示当前时间后,自动返回到DOS提示符状态
(6)答复命令中的提问
ECHO答复语|命令文件名
上述格式可以用于简化一些需要人机对话的命令(如:
CHKDSK/F;
FORMATDrive:
del*.*)的操作,它是通过DOS管道命令把ECHO命令输出的预置答复语作为人机对话命令的输入。
下面的例子就相当于在调用的命令出现人机对话时输入“Y”回车:
C:
>
ECHOY|CHKDSK/F
ECHOY|DELA:
*.*
(7)建立新文件或增加文件内容
格式:
ECHO文件内容>
文件名
ECHO文件内容>
例如:
ECHO@ECHOOFF>
AUTOEXEC.BAT建立自动批处理文件
ECHOC:
\CPAV\BOOTSAFE>
AUTOEXEC.BAT向自动批处理文件中追加内容
TYPEAUTOEXEC.BAT显示该自动批处理文件
@ECHOOFF
\CPAV\BOOTSAFE
PAUSE,暂停的意思,在这里是停止系统命令的执行并显示下面的内容。
例:
PAUSE
运行显示:
请按任意键继续...
要显示其他提示语,可以这样用:
Echo其他提示语&
pause>
nul
4、errorlevel
程序返回码
echo%errorlevel%
每个命令运行结束,可以用这个命令行格式查看返回码
用于判断刚才的命令是否执行成功
默认值为0,一般命令执行出错会设errorlevel为1
5、GOTO和:
GOTO会点编程的朋友就会知道这是跳转的意思。
在批处理中允许以“:
XXX”来构建一个标号,然后用GOTOXXX跳转到标号:
XXX处,然后执行标号后的命令。
if{%1}=={}gotonoparms
if"
%2"
=="
"
gotonoparms
标签的名字可以随便起,但是最好是有意义的字符串啦,前加个冒号用来表示这个字符串是标签,goto命令就是根据这个冒号(:
)来寻找下一步跳到到那里。
最好有一些说明这样你别人看起来才会理解你的意图啊。
@echooff
start
set/avar+=1
echo%var%
if%var%leq3GOTOstart
pause
1
2
3
4
IF条件判断语句,语法格式如下:
IF[NOT]ERRORLEVELnumbercommand
IF[NOT]string1==string2command
IF[NOT]EXISTfilenamecommand
下面逐一介绍,更详细的分析请看后面章节。
(1)IF[NOT]ERRORLEVELnumbercommand
IFERRORLEVEL这个句子必须放在某一个命令的后面,执行命令后由IFERRORLEVEL来判断命令的返回值。
Number的数字取值范围0~255,判断时值的排列顺序应该由大到小。
返回的值大于等于指定的值时,条件成立
dirc:
rem退出代码为>
=1就跳至标题1处执行,>
=0就跳至标题0处执行
IFERRORLEVEL1goto1
IFERRORLEVEL0goto0
Rem上面的两行不可交换位置,否则失败了也显示成功。
echo命令执行成功!
Rem程序执行完毕跳至标题exit处退出
gotoexit
echo命令执行失败!
exit
命令执行成功!
(2)IF[NOT]string1==string2command
string1和string2都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思)
条件相等后即执行后面的command
检测当前变量的值做出判断,为了防止字符串中含有空格,可用以下格式
if[NOT]{string1}=={string2}command
if[NOT][string1]==[string2]command
if[NOT]"
string1"
string2"
command
这种写法实际上将括号或引号当成字符串的一部分了,只要等号左右两边一致就行了,比如下面的写法就不行:
if{string1}==[string2]command
(3)IF[NOT]EXISTfilenamecommand
EXISTfilename为文件或目录存在的意思
echooff
IFEXISTautoexec.batecho文件存在!
IFnotEXISTautoexec.batecho文件不存在!
这个批处理大家可以放在C盘和D盘分别执行,看看效果
例子:
setvar=我是值
请看setvar=我是值,这就是BAT直接在批处理中设置变量的方法!
set是命令
var是变量名
=号右边的"
我是值"
是变量的值
在批处理中我们要引用这个变就把var变量名用两个%(百分号)扩起来,如%var%
这种SET语法只能直接在BAT代码的提前赋予变量的值,有时候我们需要提供一个交互界面,让用户自己输入变量的值,然后我们在来根据这个值来做相应操作,现在就来说说这SET的这种语法,只需要加一个"
/P"
参数就可以了!
set/pvar=请输入变量的值:
if%var%==1echo您输入了1~_~
set/p是命令语法
var是变量名
=号右边的"
请输入变量的值:
"
,这个是提示语,不是变量的值了!
运行后,我们在提示语后面直接输入1,就会显示一行您输入了1。
使用set/?
查看SET的帮助我们发现SET除了上面讲的
SET[variable=[string]]
SET/Pvariable=[promptString]
这两种语法外,还有如下几种语法:
SET/Aexpression
环境变量替换已如下增强:
%PATH:
str1=str2%
~10,5%
~-10%
~0,-2%
这机种语法有什么用处呢?
现在我们来一个个讲解他们!
SET/Aexpression
/A命令行开关指定等号右边的字符串为被评估的数字表达式。
该表达式
评估器很简单并以递减的优先权顺序支持下列操作:
()
-分组
!
~-
-一元运算符
*/%
-算数运算符
+-
-算数运算符
<
>
-逻辑移位
&
-按位“与”
^
-按位“异”
|
-按位“或”
=*=/=%=+=-=
-赋值
=^=|=<
=>
=
,
-表达式分隔符
上面这些是系统帮助里的内容,来简单解释一下:
set的/A参数就是让SET可以支持数学符号进行加减等一些数学运算!
现在开始举例子介绍这些数学符号的用法:
看例子这里的例子请直接在CMD下拷贝命令运行,不需要保存为BAT!
set/avar=1+1
set/a语法,var变量名1+1数学式子
拷贝运行后会直接显示一个2,或者运行完后我们输入echo%var%,也是二,这就是一个简单的加法运算!
set/avar=2-1
结果是多少呢?
如果你看不到结果就echo%var%.....
set/avar=2*2乘法运算
set/avar=2/2除法运算
set/avar=(1+1)+(1+1)结果等于4看得懂吧!
set/aa=1+1,b=2+1,c=3+1
运行后会显示一个4,但我们用echo%a%%b%%c%后看结果,会发现其他数学运算也有效果!
,这就是逗号的作用!
有时候我们需要直接在原变量进行加减操作就可以用这种语法
set/avar+=1
这样的语法对应原始语法就是set/avar=%var%+1都是一样的结果,在原变量的值上在进行数学运算,不过这样写简单一点。
另外还有一些用逻辑或取余操作符,这些符号,按照上面的使用方法会报错的。
比如我们在CMD里输入set/avar=1&
1"
与运算"
,他并不会显示为1,而是报错,
为什么?
对于这样的"
逻辑或取余操作符"
,我们需要把他们用双引号引起来,看例子
set/avar=1"
1这样结果就显示出来了,其他逻辑或取余操作符用法
+"
1异运算
%"
1
取模运算
set/avar=2"
2次方运算
这些符号也可以用&
=这样的简单用法如
set/avar"
="
1等于set/avar=%var%"
1注意引号
好符号说到这,现在说%PATH:
这个是替换变量值的内容,看例子
seta=
echo替换前的值:
%a%"
setvar=%a:
=%
echo替换后的值:
%var%"
对比一下,我们发现他把变量%a%的空格给替换掉了,从这个例子,我们就可以发现%PATH:
str1=str2%这个操作就是把变量%PATH%的里的str1全部用str2替换
比如我们把上面的例子改成这样
seta=
.=伤脑筋%
解释setvar=%a:
set命令var变量名字a是要进行字符替换的变量的值,"
."
为要替换的值,
伤脑筋"
为替换后的值!
执行后就会把变量%a%里面的"
全部替换为"
这就是set的替换字符的很好的功能!
先讲到这
~10,5%
这个什么意思,看例子:
其他两种语法
他们也是显示指定变量指定几位的值得的意思
~-10%例子
~-3%
这个就是把变量a倒数3位的值给变量VAR
当然我们也可以改成这样
~3%
这个就是把变量a的前3位的值给变量VAR
~0,-2%
例子
~0,-3%
执行后,我们发现显示的是"
bbs.verybat"
,少了"
.cn"
从结果分析,很容易分析出,这是把变量a的值从0位开始,
显示变量a总位数-3的位的值得(我们给变量a的的值bbs.verybat有11位,11-3=8),这样他就
只显示从第0位开始到第8位的值,并赋予给变量var
如果改成这样
~2,-3%
那么他就是显示从第2位开始到第8位的值,并赋予给变量var
二、常用特殊符号
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等等
%0%1%2%3%4%5%6%7%8%9%*为命令行传递给批处理的参数
%0批处理文件本身,包括完整的路径和扩展名
%1第一个参数
%9第九个参数
%*从第一个参数开始的所有参数
参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
最简单的复制文件自身的方法
copy%0d:
\wind.bat
小技巧:
添加行内注释
%注释内容%(可以用作行内注释,不能出现重定向符号和管道符号)
为什么这样呢?
此时“注释内容”其实被当作变量,其值是空的,故只起注释作用,不过这种用法容易出现语法错误,一般不用。
3、>
输出重定向命令
这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台)
在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&
,&
,||和语句块的制约限制。
比如:
使用命令:
echohello>
1.txt将建立文件1.txt,内容为”hello“(注意行尾有一空格)
echohello>
1.txt将建立文件1.txt,内容为”hello“(注意行尾没有空格)
4、>
这个符号的作用和>
有点类似,但他们的区别是>
是传递并在文件的末尾追加,而>
是覆盖
用法同上
同样拿1.txt做例子
1.txt
echoworld>
1.txt
这时候1.txt内容如下:
hello
world
5、<
这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。
(本人已查过,网上也查不到相关资料)
,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
echo2005-05-01>
temp.txt
date<
deltemp.txt
这样就可以不等待输入直接修改当前日期
,将一个句柄的输出写入到另一个句柄的输入中。
,刚好和>
相反,从一个句柄读取输入并将其写入到另一个句柄输出中。
常用句柄:
0、1、2,未定义句柄:
3—9
1>
nul表示禁止输出正确的信息
2>
nul表示禁止输出错误信息。
其中的1与2都是代表某个数据流输入输出的地址(NTCMD称之为句柄,MSDOS称之为设备)。
句柄0:
标准输入stdin,键盘输入
句柄1:
标准输出stdout,输出到命令提示符窗口(console,代码为CON)
句柄2:
标准错误stderr,输出到命令提示符窗口(console,代码为CON)
其中的stdin可被<
重定向,stdout可被>
重定向。
我们已经知道读取文本中的内容可以用for命令,但如果只需要读取第一行用for命令就有点麻烦。
简单的办法如下:
set/pstr=<
%0
echo%str%
运行显示批处理文件自身的第一行:
6、|命令管道符
第一条命令|第二条命令[|第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,在unix中这种方式很常见。
\|find"
txt"
以上命令是:
查找C:
\所有,并发现TXT字符串。
FIND的功能请用FIND/?
自行查看
7、^转义字符
^是对特殊符号<
,>
的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。
比如
echotest^>
结果则是:
test>
他没有追加在1.txt里,呵呵。
只是显示了出来
另外,此转义字符还可以用作续行符号。
举个简单的例子:
echo英雄^
是^
好^
男人
为什么转义字符放在行尾可以起到续行符的作用呢?
原因很简单,因为每行末尾还有一个看不见的符号,即回车符,转义字符位于行尾时就让回车符失效了,从而起到了续行的作用。
8、&
语法:
第一条命令&
第二条命令[&
第三条命令...]
、&
、||为组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。
这在批处理脚本里是允许的,而且用的非常广泛。
因为批处理认行不认命令数目。
这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。
这里&
两边的命令是顺序执行的,从前往后执行。
dirz:
\&
diry:
dirc:
\
以上命令会连续显示z,y,c盘的内容,不理会该盘是否存在
9、&
用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行
10、||组合命令
第一条命令||第二条命令[||第三条命令...]
用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
提示:
组合命令和重定向命令一起使用必须注意优先级
管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令
问题:
把C盘和D盘的文件和文件夹列出到a.txt文件中。
看例:
dird:
\>
a.txt
这样执行后a.txt里只有D盘的信息!
因为组合命令的优先级没有重定向命令的优先级高!
所以这句在执行时将本行分成这两部分:
\和dird:
a.txt,而并不是如你想的这两部分:
\和>
a.txt。
要使用组合命令&
达到题目的要求,必须得这么写:
a.txt&
这样,依据优先级高低,DOS将把这句话分成以下两部分:
a.txt和dird:
例十八中的几句的差别比较特殊,值得好好研究体会一下。
当然这里还可以利用&
命令:
[这个也可以用dirc:
\;
d:
a.txt来实现]
11、"
双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
cd"
programfiles"
cdprogra~1
cdpro*
以上三种方法都可以进入programfiles这个目录
12、