您现在的位置是:网站首页> 编程资料编程资料

Windows中的批处理的常用符号介绍_windows_Windows系列_操作系统_

2024-01-07 423人已围观

简介 Windows中的批处理的常用符号介绍_windows_Windows系列_操作系统_

 1.@ 命令行回显屏蔽符 
       ECHO OFF可以关闭掉整个批处理命令的回显,但不能关掉ECHO OFF这个命令本身,现在我们在ECHO OFF这个命令前加个@,就可以达到所有命令均不回显的要求。
      该符号在批处理中的作用是关闭当前行命令的回显,也就是不显示执行的是什么命令,只显示命令的结果!
      2.> 重定向符        将>之前的命令执行的结果输出到>之后指定的设备或文件中去,特定的文件或标准输出(stdout--默认为系统控制台),若文件中有数据则覆盖。
      >> 重定向符   
            需要显示的数据追加到指定的输出文件之中,而不覆盖原来的内容。
      < 输入重定向
            将输入信息来源重定向为指定的设备或文件,系统默认接收键盘输入。
      >&将一个句柄的输出写入到另一个句柄的输入中
      <&刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中
            常用句柄0、1、2,未定义句柄3-9
            其中的1与2都是代表某个数据流输入输出的地址(NT CMD 称之为句柄,MSDOS称之为设备)。
        句柄0:标准输入stdin,键盘输入
        句柄1:标准输出stdout,输出到命令提示符窗口(console,代码为CON)
        句柄2:标准错误stderr,输出到命令提示符窗口(console,代码为CON)
        其中的stdin可被<重定向,stdout可被>、>>重定向,而stderr在DOS下不可直接重定向,只有通过ctty或其它命令将系统控制权转交给其它设备的方式,来间接完成。
      注意:如果用在 set /a 语句中,则>表示分组,>>表示逻辑移位。
Dos代码 
@echo off 
@rem echo 关闭命令显示,@关闭echo off本身的显示 
rem ==============设置标题title================= 
rem -使用该文件的名称作为标题 
title 测试bat的文件(test.bat--重定向) 
rem ===============重定向符>===================== 
rem 将当前文件的内容输出到指定的文件tb.txt而非控制台 
type d:\test\bak\tt.txt>d:\test\bak\tb.txt 
rem 将特定的字符串"Hello China "(注意最后的空格)写入到指定的文件 
echo Hello China >d:\test\bak\tc.txt 
rem ===============重定向符>>==================== 
echo hello>d:\test\bak\td.txt 
echo world>>d:\test\bak\td.txt 
rem ===============重定向符<===================== 
rem 重新设定当前时间 
echo 2010-01-12>d:\test\bak\te.txt 
date del d:\test\bak\te.txt 
rem ===============重定向符<===================== 
rem 如果e盘存在则将其下面的文件信息输出到te.txt 否则将错误信息输出到err.txt 
dir e:\ 1>d:\test\bak\te.txt 2>d:\test\bak\err.txt 
@pause 
     3.| 命令管道符
      管道命令,将|之前的命令的输出作为|之后的命令的输入。
      格式:第一条命令 | 第二条命令 [| 第三条命令...]
Dos代码 
@echo off 
@rem echo 关闭命令显示,@关闭echo off本身的显示 
rem ==============设置标题title================= 
rem -使用该文件的名称作为标题 
title 测试bat的文件(test.bat--管道命令) 
rem =================管道命令|=================== 
rem 将显示tom001 tom002 
rm d:\test\bak\t001.txt 
echo tom001>d:\test\bak\t001.txt 
echo neil001>>d:\test\bak\t001.txt 
echo tom002>>d:\test\bak\t001.txt 
echo neil002>>d:\test\bak\t001.txt 
echo jerry>>d:\test\bak\t001.txt 
type d:\test\bak\t001.txt | find "tom" 
@pause 
      4.^ 转义字符
      对特殊符号"<",">","&"的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅把他们当成符号而不使用他们的特殊意义。
      另外,此转义字符还可以用作续行符号。
Dos代码 
@echo off 
@rem echo 关闭命令显示,@关闭echo off本身的显示 
rem ==============设置标题title================= 
rem -使用该文件的名称作为标题 
title 测试bat的文件(test.bat--转义字符) 
rem =================转义字符^================== 
rem 用来转义 输出hello china > d:\test\bat\t.txt 
echo hello china ^> d:\test\bat\t.txt 
rem 用来续行行 输出结果为 hellochinaluchunli 
echo hello^ 
china^ 
luchunli 
@pause 
     5.& 组合命令
            允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。
            语法:第一条命令 & 第二条命令 [& 第三条命令...]
       && 组合命令
             用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
             语法:第一条命令 && 第二条命令 [&& 第三条命令...]
             这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行。
      || 组合命令
             用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令。
             语法:第一条命令 || 第二条命令 [|| 第三条命令...] 
      提示:组合命令和重定向命令一起使用必须注意优先级
  管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令。
Dos代码 
@echo off 
@rem echo 关闭命令显示,@关闭echo off本身的显示 
rem ==============设置标题title================= 
rem -使用该文件的名称作为标题 
title 测试bat的文件(test.bat--组合命令) 
rem =================组合命令&================== 
dir d:\test\aa & dir d:\test\all 
rem k盘不存在 不影响命令执行 
dir k:\ & dir d:\test\all 
rem =================组合命令&&================= 
rem k盘不存在 程序无法再执行 
dir k:\ && dir d:\test\all 
rem =================组合命令||================= 
rem k盘不存在 执行错误 后面的dir才执行 
dir k:\ || dir d:\test\all 
rem ========结合使用组合命令和重定向命令======== 
dir c:\ & dir d:\ > d:\test\bak\t002.txt 
rem 上述命令执行结果只有d盘下面的目录到t002.txt去了 
rem c盘下面的目录并没有按照预想的输出,而是打印在了控制台上 
rem 修改成为,分别进行输出 
dir c:\ > d:\test\bak\t003.txt && dir d:\ >> d:\test\bak\t003.txt 
@pause 
    6."" 双引号
    双引号允许在字符串中包含空格。
           cd "program files"
           cd progra~1
           cd pro*
           以上三种方法都可以进入program files这个目录
      7., 逗号
      逗号相当于空格,在某些情况下","可以用来当做空格使。
            如:dir,c:\
      8.; 分号
      当命令相同时,可以将不同目标用";"来隔离,但执行效果不变,如执行过程中发生错误,则返回错误报告。
             如:dir c:\;d:\;e:\;f:\
Dos代码 
@echo off 
@rem echo 关闭命令显示,@关闭echo off本身的显示 
rem ==============设置标题title================= 
rem -使用该文件的名称作为标题 
title 测试bat的文件(test.bat--分号) 
rem ==============分号;================= 
rem c d e f磁盘都存在,则正确执行,显示各磁盘下文件目录 
dir c:\;d:\;e:\;f:\ 
echo --------------------- 
rem z盘不存在则程序返回错误,对于d e f均不再执行 
dir z:\;d:\;e:\;f:\ 
@pause 
      9.% 批处理变量引导符
      表示参数,参数是指在运行批处理文件时在文件名后加的字符串。引用变量用%var%,调用程序外部参数用%1至%9等等。
               %0   %1   %2   %3   %4   %5   %6   %7   %8   %9   %*为命令行传递给批处理的参数
           %0 批处理文件本身,包括完整的路径和扩展名
           %1 第一个参数
           %9 第九个参数
           %* 从第一个参数开始的所有参数
  参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
   %%批处理变量引导符。
      set str=abc
      echo 变量 str 的值为%str%
      %也可以作为转义字符
            echo %% 输出一个%
            echo %%%% 输出两个%
Dos代码     
@echo off 
@rem echo 关闭命令显示,@关闭echo off本身的显示 
rem ==============设置标题title================= 
rem -使用该文件的名称作为标题 
title 测试bat的文件(test.bat--变量引导符) 
rem ==============变量引导符%=================== 
rem %0 代表当前文件本身 输出路径名和文件名 
echo %0  
rem 可以通过%0来拷贝自身(将当前文件的内容拷贝到tt.txt中去) 
copy %0 d:\test\bak\tt.txt 
rem 可以通过设置参数来接受输入的变量,但是不能有空格 
rem 如:set param001 = %1则取不到任何结果,只能为set param001=%1 
rem 批处理接受参数,如:test.bat tom is boy 
set param001=%1 
set param002=%2 
set param003=%3 
rem 输出 tom is boy 
echo %param001% %param002% %param003% 
rem %只能接受%1到%9九个参数,若参数多云9个则无法接受,需使用shift命令,见shift命令讲解 
rem % 与 %%的用法 
rem =两端不可有空格 
set str=abc 
echo str 的值是 %str% 
rem 以下分别输出一个% 两个% 三个% 
echo %% 
echo %%%% 
echo %%%%%% 
echo hello>d:\test\bak\t004.txt 
echo china>>d:\test\bak\t004.txt 
echo how>>d:\test\bak\t004.txt 
echo are>>d:\test\bak\t004.txt 
echo you>>d:\test\bak\t004.txt 
rem 依次输出hello china how are you 
for /f %%i in (d:\test\bak\t004.txt) do echo %%i 
rem 依次输出a b c 
for %%i in (a b c) do echo %%i 
@pause 
      10.() 括号  小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。
   括号在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用。
        注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。
       在for和if语句中属于语句格式的要求
       例如:
           for %%i in (语句1) do(语句2)
             在这条语句中,语句1必须用括号对包围,而语句2的括号对则可视情况予以抛弃或保留:如果语句2是单条语句或用&、&&、||等连接符号连接的多条语句,括号对可以抛弃,如果语句2是有逻辑先后关系的多条语句集合,则必须保留括号对,并且,多条语句必须断行书写。
             if 条件 (语句1) else (语句2)
             如果没有else部分,则语句1的括号对可有可无;如果有else部分,则语句1中的括号对必须保留,此时,语句2中的括号对保留与否,和上一点类似。
Dos代码 
@echo off 
@rem echo 关闭命令显示,@关闭echo off本身的显示 
rem ==============设置标题title================= 
rem -使用该文件的名称作为标题 
title 测试bat的文件(test.bat--括号) 
rem ==================括号()==================== 
rem 输出1 2 3 每个单独占一行 
echo 1 & echo 2 & echo 3 
echo -------------- 
(     
    echo 1 
    echo 2 
    echo 3 

@pause 
      11.! 感叹号
             在变量延迟问题中,用来表示变量,即%var%应该表示为!var!,见setlocal介绍。
             在set /a 一元运算符中表示逻辑非
      12.: 冒号
      任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。
      有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别,表示该行是一个标签,它之后的内容是一个标签段。
      如:test,则表示:test之下的内容是标签段,而test是这个标签段的名,可以用 goto test 、goto :test 跳转 到该标签段或用call :test 调用该子过程。
      在 set 语句中:和~同时使用时,:起到截取字符串的功能。
            假设 set str=abcde,那么,set var=%str:~0,1% 表示截取字符串abcde的第一个字符;
      和=同时使用时,起到替换字符串的功能。
            假设:set str=abc:de,那么,set var=%str:a=1% 表示把字符串abc:de中的a替换为1
      无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以 :: 常被用作注释符号,其实 :+ 也可起注释作用。
Dos代码     
@echo off 
@rem echo 关闭命令显示,@关闭echo off本身的显示 
rem ==============设置标题title================= 
rem -使用该文件的名称作为标题 
title 测试bat的文件(test.bat--冒号) 
rem ===================冒号:==================== 
rem 作为标签段 
set num=3 
set count=4 
set /a flag=num+1 
:: 关于判断相等若不加goto end则程序执行有问题 
if %count%==%flag% goto begin 
goto end 
:begin 
    echo This is begin 
:end 
    echo This is end 
rem 截取/替换字符 
set str=luchunli 
set var001=%str:~2,7% 
rem 输出 chunli 
echo %var001% 
set var002=%str:u=r% 
rem 输出 lrchrnli 
echo %var002% 
@pause 
     13.:: 注释符号
      表示该行内容为注释内容。:: 是个无效的标签名,:加上空格同样可以起到注释的作用。
      ::的功能和注释命令rem相同。
      但是还有几点区别
            (1)::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态。
            (2)rem 注释语句中的某些命令符号如重定向符号和管道符号还是会执行,而如果用::来注释的时候,与::同处一行的所有命令或符号直接被命令解释器忽略掉,无形中提高了注释的兼容性和整个程序的执行效率,并且在众多的命令语句中更显得醒目,所以,注释语句推荐使用::的格式。   
            (3)rem 可以用于 config.sys 文件中。
Dos代码 
rem ==============注释命令符号::================= 
rem 以下两句都不会执行 
rem tt>d:\test\bak\t.txt 
:: ttb>>d:\test\bak\t.txt 
      14.~
      和冒号(:)一起使用时起到截取字符串的功能。
      在set /a语句中时,它是一元运算符,表示将操作数按位取反。
            例如,set /a num=~1的执行结果是-2,set /a num=~0的结果是-1
      用在for语句中,表示增强for的功能,能够提取到更多的信息。 
            例如:在批处理文件的for语句中:%%~i表示去掉第一对外侧引号,%%~zi表示获取文件的大小(以字节为单位),%%~ni表示获取文件名,%%~xi表示获取扩展名(带点号)……它们可以组合使用,如%%~nxi表示获取文件名和后缀名。
      15.+ - * /
      在 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/

-六神源码网