cmd批处理经常使用符号详解

 
一、@
通常在它以后紧跟一条命令或一条语句,则此命令或语句自己在执行的时候不会显示在屏幕上。请把下面的代码保存为test.cmd文件,而后运行,比较一下两条echo语句在屏幕上的输出差别:
    echo a
    @pause
    @echo b
    @pause
执行结果以下:
        C:\Documents and Settings\JM\桌面>echo a
        a
        请按任意键继续...
        b
        请按任意键继续...
二、%、%%
百分号用在不一样的场合,有不一样的含义:
① 当百分号成对出现,而且其间包含非特殊字符时,通常作变量引用处理,好比:%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
三、:、::
① 以:打头的单个的:表示该行是一个标签,它以后的内容是一个标签段,如: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;
四、~
① 用在 set 语句中,和:同时使用时,起到截取字符串的功能,请参考上一条的解释;
② 用在 set /a 语句中时,它是一元运算符号,表示将操做数字按位取反,例如,set /a num=~1的执行结果是-2,set /a num=~0的结果是-1
③ 用在for语句中,表示加强for的功能,可以提取到更多的信息。例如:在批处理文件的for语句中:%%~i表示去掉第一对外侧引号,%%~zi表示获取文件的大小(以字节为单位),%%~ni表示获取文件名,%%~xi表示获取扩展名(带点号)……它们能够组合使用,如%%~nxi表示获取文件名和后缀名。
五、>、>>
通常而言,>表示用新内容覆盖原文件内容,>>表示向原文件追加内容,此时,它们以重定向符号的身份出现;若是用在 set /a 语句中,则>表示分组,>>表示逻辑移位;
六、|
通常而言,它以管道符号的身份出现,表示把在它以前的命令或语句的执行结果做为在它以后的命令或语句的处理对象,简而言之,就是把它以前的输出做为它以后的输入,例如:echo abcd|findstr "b",表示把echo abcd的执行结果,做为findstr "b" 的执行对象,也就是在字符串abcd中查找b字符;若是test.txt中有abcd字符串,则该语句与 findstr "b" test.txt 具备一样的效果;
七、^
通常而言,^以转义字符的身份出现。由于在 cmd环境中,有些字符具有特殊功能,如>、>>表示重定向,|表示管道,&、&&、||表示语句链接……它们都有特定的功能,若是须要把它们做为字符输出的话,echo >、echo | ……之类的写法就会出错——cmd解释器会把它们做为具备特殊功能的字符对待,而不会做为普通字符处理,这个时候,就须要对这些特殊字符作转义处理:在每一个特殊字符前加上转义字符^,所以,要输出这些特殊字符,就须要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之类的格式来处理;
八、&
通常而言,&表示两条命令或语句同时执行的意思。如 echo a&echo b,将在屏幕上同时显示a和b字符。当几条语句含义近似或做用相同且没有前后的顺序之别时,启用&符号链接这些语句将会增长程序的可读性;
九、&&、||
这是一对含义截然相反的命令符,&&表示若是它以前的语句成功执行,将执行它以后的语句,而||则表示若是它以前的语句执行失败,将执行它以后的语句;在某些场合,它们能替代 if……else…… 语句;例如:
    @echo off
    md test&&echo 成功建立文件夹test||echo 建立文件夹test失败
    pause
效果等同于以下代码:
    @echo off
    md test
    if "%errorlevel%"=="0" (echo 成功建立文件夹test) else echo 建立文件夹test失败
    pause
十、()
小括号对常常出如今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 exist test.txt echo 当前目录下有test.txt
    pause
    @echo off
    if exist test.txt (echo 当前目录下有test.txt) else echo 当前目录下没有test.txt
    pause
    @echo off
    if exist test.txt (echo 当前目录下有test.txt) else (
        echo 当前目录下没有test.txt
        pause
        cls
        echo 即将建立test.txt文件
        cd.>test.txt&&echo 成功建立test.txt
    )
    pause
③ 特定场合下使用括号对,不但可使代码逻辑清晰,加强可读性,还可能会减小代码量。好比用echo语句构造多行文本内容的时候:
    @echo off
    (
    echo 第一行
    echo 第二行
    echo 第三行
    )>test.txt
    start test.txt
若是不使用括号对的话,则须要使用以下代码:
    @echo off
    echo 第一行>test.txt
    echo 第二行>>test.txt
    echo 第三行>>test.txt
    start test.txt
十一、+、-、*、/
在 set /a 语句中,这些符号的含义分别为:加、减、乘、除。例如:set /a num=1+2-3*4/5。须要注意的是,这些运算符号遵循数学运算中的优先级顺序:先乘除后加减,有括号的先算括号,而且,直接忽略小数点,所以,刚才那个算式的结果是1而不是0或0.6。
另外,有可能会在代码中看到这样的写法:set /a num+=一、set /a num-=一、set /a num*=1 和 set /a num/=1,这些表示累加、累减、累乘、累除,步长都是1,展开后的完整写法为:set /a num=num+一、set /a num=num-一、set /a num=num*1 和 set /a num=num/1(set /a 语句中,变量引用能够忽略百分号对或感叹号对,set /a num=%num%+1 与 set /a num=num+1 等同)
十二、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
相关文章
相关标签/搜索