首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > windows >

Windows批处理惯用符号

2012-08-11 
Windows批处理常用符号????? 1.@ 命令行回显屏蔽符??????? ECHO OFF可以关闭掉整个批处理命令的回显,但不

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 语句中,则>表示分组,>>表示逻辑移位。

@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.txtrem 将特定的字符串"Hello China "(注意最后的空格)写入到指定的文件echo Hello China >d:\test\bak\tc.txtrem ===============重定向符>>====================echo hello>d:\test\bak\td.txtecho world>>d:\test\bak\td.txtrem ===============重定向符<=====================rem 重新设定当前时间echo 2010-01-12>d:\test\bak\te.txtdate <d:\test\bak\te.txtdel d:\test\bak\te.txtrem ===============重定向符<=====================rem 如果e盘存在则将其下面的文件信息输出到te.txt 否则将错误信息输出到err.txtdir e:\ 1>d:\test\bak\te.txt 2>d:\test\bak\err.txt@pause

???? 3.| 命令管道符
????? 管道命令,将|之前的命令的输出作为|之后的命令的输入。
????? 格式:第一条命令 | 第二条命令 [| 第三条命令...]

@echo off@rem echo 关闭命令显示,@关闭echo off本身的显示rem ==============设置标题title=================rem -使用该文件的名称作为标题title 测试bat的文件(test.bat--管道命令)rem =================管道命令|===================rem 将显示tom001 tom002rm d:\test\bak\t001.txtecho tom001>d:\test\bak\t001.txtecho neil001>>d:\test\bak\t001.txtecho tom002>>d:\test\bak\t001.txtecho neil002>>d:\test\bak\t001.txtecho jerry>>d:\test\bak\t001.txttype d:\test\bak\t001.txt | find "tom"@pause

????? 4.^ 转义字符
??????对特殊符号"<",">","&"的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅把他们当成符号而不使用他们的特殊意义。
??????另外,此转义字符还可以用作续行符号。?

@echo off@rem echo 关闭命令显示,@关闭echo off本身的显示rem ==============设置标题title=================rem -使用该文件的名称作为标题title 测试bat的文件(test.bat--转义字符)rem =================转义字符^==================rem 用来转义 输出hello china > d:\test\bat\t.txtecho hello china ^> d:\test\bat\t.txtrem 用来续行行 输出结果为 hellochinaluchunliecho hello^china^luchunli@pause

???? 5.& 组合命令
??????????? 允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。
????? ????? 语法:第一条命令 & 第二条命令 [& 第三条命令...]
????? ?&& 组合命令
???? ??????? 用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
??????????? ?语法:第一条命令 && 第二条命令 [&& 第三条命令...]
???????????? 这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行。??
????? || 组合命令
???????????? 用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令。
???????????? 语法:第一条命令 || 第二条命令 [|| 第三条命令...]??
????? 提示:组合命令和重定向命令一起使用必须注意优先级
  管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令。

@echo off@rem echo 关闭命令显示,@关闭echo off本身的显示rem ==============设置标题title=================rem -使用该文件的名称作为标题title 测试bat的文件(test.bat--组合命令)rem =================组合命令&==================dir d:\test\aa & dir d:\test\allrem k盘不存在 不影响命令执行dir k:\ & dir d:\test\allrem =================组合命令&&=================rem k盘不存在 程序无法再执行dir k:\ && dir d:\test\allrem =================组合命令||=================rem k盘不存在 执行错误 后面的dir才执行dir k:\ || dir d:\test\allrem ========结合使用组合命令和重定向命令========dir c:\ & dir d:\ > d:\test\bak\t002.txtrem 上述命令执行结果只有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:\

@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 %%%% 输出两个%

@echo off@rem echo 关闭命令显示,@关闭echo off本身的显示rem ==============设置标题title=================rem -使用该文件的名称作为标题title 测试bat的文件(test.bat--变量引导符)rem ==============变量引导符%===================rem %0 代表当前文件本身 输出路径名和文件名echo %0rem 可以通过%0来拷贝自身(将当前文件的内容拷贝到tt.txt中去)copy %0 d:\test\bak\tt.txtrem 可以通过设置参数来接受输入的变量,但是不能有空格rem 如:set param001 = %1则取不到任何结果,只能为set param001=%1rem 批处理接受参数,如:test.bat tom is boyset param001=%1set param002=%2set param003=%3rem 输出 tom is boyecho %param001% %param002% %param003%rem %只能接受%1到%9九个参数,若参数多云9个则无法接受,需使用shift命令,见shift命令讲解rem % 与 %%的用法rem =两端不可有空格set str=abcecho str 的值是 %str%rem 以下分别输出一个% 两个% 三个%echo %%echo %%%%echo %%%%%%echo hello>d:\test\bak\t004.txtecho china>>d:\test\bak\t004.txtecho how>>d:\test\bak\t004.txtecho are>>d:\test\bak\t004.txtecho you>>d:\test\bak\t004.txtrem 依次输出hello china how are youfor /f %%i in (d:\test\bak\t004.txt) do echo %%irem 依次输出a b cfor %%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中的括号对保留与否,和上一点类似。?

@echo off@rem echo 关闭命令显示,@关闭echo off本身的显示rem ==============设置标题title=================rem -使用该文件的名称作为标题title 测试bat的文件(test.bat--括号)rem ==================括号()====================rem 输出1 2 3 每个单独占一行echo 1 & echo 2 & echo 3echo --------------(echo 1echo 2echo 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无法识别的标号,可以起到注释作用,所以 :: 常被用作注释符号,其实 :+ 也可起注释作用。

@echo off@rem echo 关闭命令显示,@关闭echo off本身的显示rem ==============设置标题title=================rem -使用该文件的名称作为标题title 测试bat的文件(test.bat--冒号)rem ===================冒号:====================rem 作为标签段set num=3set count=4set /a flag=num+1:: 关于判断相等若不加goto end则程序执行有问题if %count%==%flag% goto begingoto end:beginecho This is begin:endecho This is endrem 截取/替换字符set str=luchunliset var001=%str:~2,7%rem 输出 chunliecho %var001%set var002=%str:u=r%rem 输出 lrchrnliecho %var002%@pause

?????13.:: 注释符号
???? ?表示该行内容为注释内容。:: 是个无效的标签名,:加上空格同样可以起到注释的作用。
????? ::的功能和注释命令rem相同。
????? 但是还有几点区别
??????????? (1)::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态。
??????????? (2)rem 注释语句中的某些命令符号如重定向符号和管道符号还是会执行,而如果用::来注释的时候,与::同处一行的所有命令或符号直接被命令解释器忽略掉,无形中提高了注释的兼容性和整个程序的执行效率,并且在众多的命令语句中更显得醒目,所以,注释语句推荐使用::的格式。
????????????(3)rem 可以用于 config.sys 文件中。?

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/1(set /a 语句中,变量引用可以忽略百分号对或感叹号对,set /a num=%num%+1 与 set /a num=num+1 等同)
????? 16.equ neq lss leq gtr geq
?????????????????? 命令符号??????? ?含义??????????????? ?英文解释
?????????????????? EQU?????????????? ? 等于??????????????? ?equal
?????????????????? NEQ?????????????? ? 不等于???????????????? not equal
???????????????????LSS?????????????? ? 少于??????????????? ?less than
????????????????? ?LEQ?????????????? ? 少于或等于???????? ?less than or equal
???????????????????GTR?????????????? ? 大于???????????????? ?greater than
?????????????????? GEQ?????????????? ? 大于或等于???????? ?greater than or equal

    rem ==========equ neq lss leq gtr geq===========    set str001=tom    set str002=tom    rem equ 输出equal    if %str001% equ %str002% echo equal

?????? 17.点(.)和双点(..)

????????????? ?一个点代表当前目录;两个点代表上一级目录。

?????? 18.问号(?)

?????????????? 匹配任意一个字符

?????????????? 在路径中代表任意一个统配符

?????????????? 紧跟在/之后表示获取帮助,如if /? 和 set /?

热点排行