bat脚本注释多⾏_cmd批处理常⽤符号详解
1、@⼀般在它之后紧跟⼀条命令或⼀条语句,则此命令或语句本⾝在执⾏的时候不会显⽰在屏幕上。请把下⾯的代码保存为d⽂件,然后运⾏,⽐较⼀下两条echo语句在屏幕上的输出差异:
echo a
@pause
@echo b
@pause
执⾏结果如下:
C:\Documents and Settings\JM\桌⾯>echo a
a
请按任意键继续...
请按任意键继续...
2、%、%%百分号⽤在不同的场合,有不同的含义:
① 当百分号成对出现,并且其间包含⾮特殊字符时,⼀般做变量引⽤处理,⽐如:%var%、%str%。把以下代码保存为批处理⽂件,运⾏后观察屏幕显⽰结果:
@echo off
set str=abc
echo 变量 str 的值是: %str%
pause
在屏幕上将显⽰这样的结果:
变量 str 的值是: abc
按任意键继续...
另外,百分号作为变量引⽤还有⼀种特殊形式,那就是对形式参数的引⽤,此时,单个百分号后⾯紧跟0~9这10个数字,如%0、%1,其中,%0为脚本本⾝的名称,%1⾄%9为第⼆⾄九个参数...最多⽀持%
0~%9,%10以后就是变量引⽤了,即%15为%1的值接上5。
请看演⽰代码:
@echo off
if defined str goto next
set str=
set /p str=请把⽂件拉到本窗⼝后回车:
call "%~0" %str%
pause
exit
:next
cls
echo 本批处理⽂件完整路径为:"%~0"
echo 拖到本窗⼝的⽂件完整路径为:"%~1"
goto :eof
② 出现在 set /a 语句中时,表⽰两数相除取余数,也就是所谓的模运算,它在命令⾏窗⼝和批处理⽂件中的写法略有差异:在命令⾏窗⼝中,只需要单个的%,在批处理⽂件中,需要连续两个百分号,写成%%。
例如:在命令⾏窗⼝中,运⾏ set /a num=4%2 ,则结果将显⽰0,因为4除以2的余数为0;如果保存为批处理⽂件,则此语句将略有改变:
@echo off
set /a num=4%%2
echo 4除以2的余数为 %num%
pause
③ 转义符号:如果要显⽰%本⾝时,需要在前⾯⽤%来转义。例如:
@echo off
echo ⼀个百分号:%%
echo 两个百分号:%%%%
echo 三个百分号:%%%%%%
pause
3、:、::① 以:打头的单个的:表⽰该⾏是⼀个标签,它之后的内容是⼀个标签段,如:test,则表⽰:test之下的内容是标签段,⽽test是这个标签段的名,可以⽤ goto test 、goto :test 跳转到该标签段或⽤ call :test 调⽤该⼦过程;⽽连续两个冒号打头表⽰该⾏内容为注释内容,实际上,:: 是个⽆效的标签名,:加上空格同样可以起到注释的作⽤,此时,::的功能和注释命令rem相同;但是,rem 注释语句中的某些命令符号如重定向符号和管道符号还是会执⾏,⽽如果⽤::来注释的时候,与::同处⼀⾏的所有命令或符号直接被命令解释器忽略掉,⽆形中提⾼了注释的兼容性和整个程序的执⾏效率,并且在众多的命令语句中更显得醒⽬,所以,注释语句推荐使⽤::的格式。
② 在 set 语句中:和~同时使⽤时,: 起到截取字符串的功能。假设 set str=abcde,那么,set var=%str:~0,1% 表⽰截取字符串abcde 的第⼀个字符;和=同时使⽤时,起到替换字符串的功能。假设:set str=abc:de,那么,set var=%str:a=1% 则表⽰把字符串abc:de中的a替换为1,set var=%str::=2% 则表⽰把字符串abc:de中的:替换为2;
4、~
① ⽤在 set 语句中,和:同时使⽤时,起到截取字符串的功能,请参考上⼀条的解释;
② ⽤在 set /a 语句中时,它是⼀元运算符号,表⽰将操作数字按位取反,例如,set /a num=~1的执⾏结果是-2,set /a num=~0的结果是-1
③ ⽤在for语句中,表⽰增强for的功能,能够提取到更多的信息。例如:在批处理⽂件的for语句中:%%~i表⽰去掉第⼀对外侧引号,%%~zi表⽰获取⽂件的⼤⼩(以字节为单位),%%~ni表⽰获取⽂件名,%%~xi表⽰获取扩展名(带点号)……它们可以组合使⽤,
如%%~nxi表⽰获取⽂件名和后缀名。
5、>、>>⼀般⽽⾔,>表⽰⽤新内容覆盖原⽂件内容,>>表⽰向原⽂件追加内容,此时,它们以重定向符号的⾝份出现;如果⽤在 set /a 语句中,则>表⽰分组,>>表⽰逻辑移位;
6、|
⼀般⽽⾔,它以管道符号的⾝份出现,表⽰把在它之前的命令或语句的执⾏结果作为在它之后的命令或语句的处理对象,简⽽⾔之,就是把它之前的输出作为它之后的输⼊,例如:echo abcd|findstr "b",表⽰把echo abcd的执⾏结果,作为findstr "b" 的执⾏对象,也就是在字符串abcd中查b字符;如果中有abcd字符串,则该语句与 findstr "b" 具有同样的效果;
7、^⼀般⽽⾔,^以转义字符的⾝份出现。因为在 cmd环境中,有些字符具备特殊功能,如>、>>表⽰重定向,|表⽰管道,&、&&、||表⽰语句连接……它们都有特定的功能,如果需要把它们作为字符输出的话,echo >、echo | ……之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待,⽽不会作为普通字符处理,这个时候,就需要对这些特殊字符做转义处理:在每个特殊字符前加上转义字符^,因此,要输出这些特殊字符,就需要⽤ echo ^>、echo ^|、echo ^|^|、echo ^^……之类的格式来处理;
8、&
⼀般⽽⾔,&表⽰两条命令或语句同时执⾏的意思。如 echo a&echo b,将在屏幕上同时显⽰a和b字符。当⼏条语句含义近似或作⽤相同且没有先后的顺序之别时,启⽤&符号连接这些语句将会增加程序的可读性;
9、&&、||
这是⼀对含义截然相反的命令符,&&表⽰如果它之前的语句成功执⾏,将执⾏它之后的语句,⽽||则表⽰如果它之前的语句执⾏失败,将执⾏它之后的语句;在某些场合,它们能替代 if……else…… 语句;例如:
@echo off
md test&&echo 成功创建⽂件夹test||echo 创建⽂件夹test失败
pause
效果等同于如下代码:
@echo off
md test
if "%errorlevel%"=="0" (echo 成功创建⽂件夹test) else echo 创建⽂件夹test失败
pause
10、()
⼩括号对经常出现在for语句和if语句中,还有⼀些特定场合;在for和if语句中属于语句格式的要求,例如:
① for %%i in (语句1) do (语句2):在这条语句中,语句1必须⽤括号对包围,⽽语句2的括号对则可视情况予以抛弃或保留:如果语句2是单条语句或⽤&、& &、||等连接符号连接的多条语句,括号对可以抛弃,如果语句2是有逻辑先后关系的多条语句集合,则必须保留括号对,并且,多条语句必须断⾏书写;例如:
@echo off
for %%i in (a b c) do echo %%i&echo --------
pause
也可以改写为:
@echo off
for %%i in (a b c) do (
echo %%i
&echo --------
)
pause
② if 条件 (语句1) else (语句2):如果没有else部分,则语句1的括号对可有可⽆;如果有else部分,则语句1中的括号对必须保留,此时,语句2中的括号对保留与否,和上⼀点类似。例如:
@echo off
if echo 当前⽬录下有
pause
@echo off
if (echo 当前⽬录下有) else echo 当前⽬录下没有重定向过多是什么意思
pause
@echo off
if (echo 当前⽬录下有) else (
echo 当前⽬录下没有
pause
cls
echo 即将创建⽂件
cd.&&&echo 成功创建
)
pause
③ 特定场合下使⽤括号对,不但可以使代码逻辑清晰,增强可读性,还可能会减少代码量。⽐如⽤echo语句构造多⾏⽂本内容的时候:
@echo off
(
echo 第⼀⾏
echo 第⼆⾏
echo 第三⾏
)&
如果不使⽤括号对的话,则需要使⽤如下代码:
@echo off
echo 第⼀⾏&
echo 第⼆⾏>&
echo 第三⾏>&
11、+、-、*、/
在 set /a 语句中,这些符号的含义分别为:加、减、乘、除。例如:set /a num=1+2-3*4/5。需要注意的是,这些运算符号遵循数学运算中的优先级顺序:先乘除后加减,有括号的先算括号,并且,直接忽略⼩数点,因此,刚才那个算式的结果是1⽽不是0或0.6。
另外,有可能会在代码中看到这样的写法:set /a num+=1、set /a num-=1、set /a num*=1 和 set /a num/=1,这些表⽰累加、累减、累乘、累除,步长都是1,展开后的完整写法为:set /a num=num+1、set /a num=num-1、set /a num=num*1 和 set /a
num=num/1(set /a 语句中,变量引⽤可以忽略百分号对或感叹号对,set /a num=%num%+1 与 set /a num=num+1 等同)
12、equ、neq、lss、leq、gtr、geq
这⼏个命令符是if语句中常⽤到的数值⽐较符号,取⾃英⽂的关键字母,具体的含义为:
命令符号 含义 英⽂解释
EQU 等于 equal
NEQ 不等于 not equal
LSS 少于 less than
LEQ 少于或等于 less than or equal GTR ⼤于 greater than
GEQ ⼤于或等于 greater than or equal
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论