当前位置:文档之家› cmd中的特殊符号

cmd中的特殊符号

cmd中的特殊符号2007年05月31日星期四 00:46@\\隐藏命令的回显。

~\\在for中表示使用增强的变量扩展;在set中表示使用扩展环境变量指定位置的字符串;在set/a中表示按位取反。

%\\使用两个%包含一个字符串表示引用环境变量。

比如一个%time%可以扩展到当前的系统时间;单个%紧跟0-9的一个数字表示引用命令行参数;用于for中表示引用循环变量;连续的两个%表示执行时脱为一个%。

^\\取消转义字符,即将所有转义字符的转义作用关闭。

比如要在屏幕显示一些特殊的字符,比如> >> | ^等时,就可以在其前面加一个^符号来显示这个^后面的字符了,^^就是显示一个^,^|就是显示一个|字符了;在set/a中是按位异;在findstr/r的[]中表示不匹配指定的字符集。

&\\命令连接字符。

比如我要在一行文本上同时执行两个命令,就可以用&命令连接这两个命令;在set/a中是按位与。

*\\代表任意个任意字符,就是我们通常所说的"通配符";比如想在c盘的根目录查找c盘根目录里所有的文本文件(.txt),那么就可以输入命令"dirc:\*.txt";在set/a中是乘法。

比如"set/a x=4*2",得到的结果是8;在findstr/r中表示将前一个字符多次匹配。

()\\命令包含或者是具有优先权的界定符吧,比如for命令要用到这个(),我们还可以在if,echo等命令中见到它的身影;-\\范围表示符,比如日期的查找,for命令里的tokens操作中就可以用到这个字符;在findstr/r中连接两个字符表示匹配范围;-跟在某些命令的/后表示取反向的开关。

+\\主要是在copy命令里面会用到它,表示将很多个文件合并为一个文件,就要用到这个+字符了;在set/a中是加法。

|\\管道符。

就是将上一个命令的输出,作为下一个命令的输入."dir /a/b | more"就可以逐屏的显示dir命令所输出的信息;在set/a中是按位或;在帮助文档中表示其前后两个开关、选项或参数是二选一的。

:\\标签定位符,可以接受goto命令所指向的标签。

比如在批处理文件里面定义了一个":begin"标签,用"goto begin"命令就可以转到":begin"变迁后面来执行批处理命令了。

" "\\界定符,在表示带有空格的路径时常要用""来将路径括起来,在一些命令里面也需要" "符号;在for/f中将表示它们包含的内容当作字符串分析;在for/f "usebackq"表示它们包含的内容当作文件路径并分析其文件的内容;在其它情况下表示其中的内容是一个完整的字符串,其中的>、>>、<、&、|、空格等不再转义。

/\\表示其后的字符(串)是命令的功能开关(选项)。

比如"dir /s/b/a-d"表示"dir"命令指定的不同的参数;在set/a中表示除法。

<\\命令重定向符,将其前面的命令的输出结果重新定向到其后面的设备中去,后面的设备中的内容被覆盖。

比如可以用"dir > lxmxn.txt"将"dir"命令的结果输出到"lxmxn.txt"这个文本文件中去;在findstr/r中表示匹配单词的右边界,需要配合转义字符\使用。

>>\\命令重定向符。

将其前面的命令的输出结果重新定向到其后面的设备中去,后面设备中的内容没有被覆盖。

<\\将其后面的文件的内容作为其前面命令的输入。

在findstr/r中表示匹配单词的左边界,需要配合转义字符\使用。

=\\赋值符号,用于变量的赋值。

比如"set a=windows"的意思意思是将"windows"这个字符串赋给变量"a";在set/a中表示算术运算,比如"set /a x=5-6*5"。

\\\这个"\"符号在有的情况下,代表的是当前路径的根目录.比如当前目录在c:\windows\system32下,那么你"dir \"的话,就相当与"dir c:\"在findstr/r中表示正则转义字符。

''在for/f中表示将它们包含的内容当作命令行执行并分析其输出;在for/f "usebackq"中表示将它们包含的字符串当作字符串分析。

.\\在路径的\后紧跟或者单独出现时:一个.表示当前目录;两个.表示上一级目录;在路径中的文件名中出现时:最后的一个.表示主文件名与扩展文件名的分隔。

&&\\连接两个命令,当&&前的命令成功时,才执行&&后的命令;||\\连接两个命令,当||前的命令失败时,才执行||后的命令。

$\\在findstr命令里面表示一行的结束。

``在for/f中表示它们所包含的内容当作命令行执行并分析它的输出。

[]在帮助文档表示其中的开关、选项或参数是可选的;在findstr/r中表示按其中指定的字符集匹配。

?\\在findstr/r中表示在此位置匹配一个任意字符;?在路径中表示在此位置通配任意一个字符;紧跟在/后表示获取命令的帮助文档。

\\当启用变量延迟时,使用!!将变量名扩起来表示对变量值的引用;在set /a中表示逻辑非。

比如set /a a=!0,这时a就表示逻辑1。

其他资料:1、%是个ESCAPE字符,通常将之译为转义字符,但也有更形象的译名脱逸字符、逃逸字符等。

也就是说%不仅仅将与其相关的特定字符串转义并替换为特定字符串,而且自身也会被“脱逸”。

而且类似于C语言中的转义字符"\",双%会转义并脱逸为单%,四%则脱为双%。

2、for本身是一个特殊的命令,类似于一个特化的命令解释器,因为它的功能实现需要执行多条语句,因此它必须也具有对命令行(特指do后的命令行)分析处理的功能。

而command/cmd实现for时自然会借用自身原有的命令行分析模块,因此for具有二级转义的特性,for中do后的语句被分两级分析和解释,第一级在command/cmd读入并解释for命令行时,第二级在for 读入并解释do命令时,它通常会对同一命令行的进行多次解释。

然后,我们可以注意到,在do中使用命令行参数变量和环境变量时,不需要双%,那是因为,这些变量在经过第一级转义后,被替换成特定的不变的字符串常量,参与for循环的所有执行过程;而替代变量则要求在执行(do后的子命令行中)过程中不断的动态变化,而这个变化自然仍需要通过脱逸字符来实现,因此使用双%就是成了必然的选择。

另外,还需要注意到,在命令行中使用for时不需要双%,这源于命令解释器对命令行与批处理的处理方式不同。

在早期的DOS版本中,%在命令行中不被视为转义字符,所以不会被转义和脱逸,所以当时无法在命令行直接引用环境变量。

而使用for时,只需要一个%供for进行转义和脱逸就够了。

在以后的命令解释器版本中,加入了命令行转义的支持(主要是环境变量的支持),但命令行for使用单%的传统仍然保留了下来。

而 cmd中的变量延迟替换是属于特殊的情况,但不违背以上的转义原则,只是for中的环境变量不再是常量了。

rmdir /S /Q %mhnet% 2>NUL 1>NUL 做简单解释这句代码的大意是指将 %mhnet% 指定的目录删除,/s 代表删除其中的子目录,/q 表示删除目录树时不提示确认, 1>nul 表示将正确删除目录树的信息禁止输出,2>nul 表示将删除过程中的错误信息禁止输出其中的1与2都是代表某个数据流输入输出的地址(NT CMD 称之为句柄,MSDOS 称之为设备),下表(引自WinXP帮助文档“使用命令重定向操作符(Redirection Operators”一节))将列出可用的句柄。

句柄句柄的数字代号说明STDIN 0 键盘输入STDOUT 1 输出到命令提示符窗口STDERR 2 错误输出到命令提示符窗口UNDEFINED 3-9 这些句柄由应用程序和各个具体工具单独定义0 键盘输入1 输出到命令提示符窗口2 错误输出到命令提示符窗口3-9 这些句柄由应用程序和各个具体工具单独定义。

2 > nul 表示程序出错的信息也不显示。

call attrib -r -h c:\autoexec.bat >nul这句其实是:call attrib -r -h c:\autoexec.bat 1 > nul这些1,2,0等等都是句柄,说白了就是代号,你只要知道1是代表输出信息,2是代表出错信息,0是代表键盘输入就行了。

如果有什么不明白的可以多看看帮助与支持。

命令行对重定向符号出现的位置不做过多限定,只要重定向符号后紧随“字符设备”即可,故以下语句等效:echo Hello World> hello.txtecho Hello> Hello.txt Worldecho> Hello.txt Hello World> hello.txt echo Hello World在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&,&&,||和语句块的制约限制。

echo Message1> msg1.txt & echo Message2> msg2.txtif "%target%"=="" (echo message to screen ) else (echo message to file> %target%)综上所述,>nul 意为将此句命令所产生的标准输出请求重新定向到空设备中,而因为此设备的缄默特性,即相当于将此语句的输出信息屏蔽(并非隐藏);而 2>nul 则是将程序执行错误时的标准错误信息输出请求重定向后屏蔽。

它们联合使用,即为将此语句所可能产生的所有输出信息屏蔽。

“重定向”是MSDOS起就存在的命令行特性,负责将指定命令或语句所产生的输入输出请求由缺省的“控制台”转交给其它的“设备”来完成,它的启动标志是“重定向符号”(包括“>,>>,<”三个,其各自意义见[1])出现在句中。

相关主题