第二部分:特殊的符号与批处理
在命令行下有些符号是不允许使用的但有些符号却有着特殊的意义。 1、 符号(@) @在批处理中的意思是关闭当前行的回显。我们从上面知道用命令echo off可以关掉整个批处理的命令回 显但却不能不显示echo off这个命令。现在我们在这个命令前加上@这样echo off这一命令就被@关闭了回 显从而达到所有命令均不回显得要求 2、 符号(>) >的意思是传递并覆盖。他所起的作用是将运行后的回显结果传递到后面的范围(后面可是文件也可是默 认的系统控制台)例: 文件1.txt的文件内容为: 1+1 使用命令c:\>dir *.txt >1.txt 这时候1.txt的内容如下 驱动器 C 中的卷没有标签。 卷的序列号是 301A-1508 C:\ 的目录 2003-03-11 14:04 1,005 FRUNLOG.TXT 2003-04-04 16:38 18,598,494 log.txt 2003-04-04 17:02 5 1.txt 2003-03-12 11:43 0 aierrorlog.txt 2003-03-30 00:35 30,571 202.108.txt 5 个文件 18,630,070 字节 0 个目录 1,191,542,784 可用字节 >将命令执行的结果覆盖了原始的文件内容。 在传递给控制台的时候程序将不会有任何回显(注意:这里的回显跟echo off关掉的回显不是同一概念。 Echo off关掉的是输入命令的回显,这里的回显是程序执行中或后的回显)例: C:\>dir *.txt >nul 程序将没有任何显示也不会产生任何痕迹。 3、 符号(>>) 符号>>的作用与符号>相似,但他们的区别在于>>是传递并在文件末尾追加>>也可将回显传递给控制台( 用法同上)例: 文件1.txt内同为: 1+1 使用命令c:\>dir *.txt >>1.txt 这时候1.txt的内容如下 1+1 驱动器 C 中的卷没有标签。 卷的序列号是 301A-1508 C:\ 的目录 2003-03-11 14:04 1,005 FRUNLOG.TXT 2003-04-04 16:38 18,598,494 log.txt 2003-04-04 17:02 5 1.txt 2003-03-12 11:43 0 aierrorlog.txt 2003-03-30 00:35 30,571 202.108.txt 5 个文件 18,630,070 字节 0 个目录 1,191,542,784 可用字节 >>将命令执行的结果覆加在了原始的文件内容后面。 4、 符号(|) |是一个管道传输命令意思是将上一命令执行的结果传递给下一命令去处理。例: C:\>dir c:\|find "1508" 卷的序列号是 301A-1508 以上命令的意思为查找c:\的所有并发现1508字符串。Find的用法请用 find /?自行查看 在不使用format的自动格式化参数的时候我是这样来自动格式化盘片的 echo y|fornat a: /s /q /v:system 用过format命令的人都知道format有一个交互对化过程,要使用者输入y来确定当前的命令是否被执行。 在这个命令前加上echo y并用管道传输符|将echo执行的结果y传递给format从而达到手工输入y的目的( 这条命令有危害性,测试的时候请谨慎) 5、 符号(^) ^ 是对特殊符号 > 、<、 &、的前导字符。在命令中他将以上的3个符号的特殊动能去掉仅仅只吧他们当 成符号而不使用他们的特殊意义。例: c:\>echo test ^> 1.txt test > 1.txt 从上面可以看出并没有把test写入文件1.txt而是将test >1.txt 当字符串显示了出来。这个符号在远程 构建批处理的时候很有效果。 6、 符号(&) &符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败将不影响第2个命令的执行。例: c:\> dir z:\ &dir y:\ &dir c:\ 以上的命令将会连续显示z: y: c:盘内的内容不理会该盘符是否存在。 7、 符号(&&) &&符号也是允许在一行中使用2个以上不同的命令,当第一个命令执行失败后后续的命令将不会再被执行 。例: c:\> dir z:\ &&dir y:\ &&dir c:\ 以上的命令将会提示检查是否存在z:盘如果存在则执行,如果不存在则停止执行所有的后续命令 8、 符号(" ") " "符号允许在字符串中包含空格。进入一个特殊的目录可以用如下方法例: c:\>cd “Program Files” c:\>cd progra~1 c:\>cd pro* 以上方法都可以进入Program Files目录 9、 符号(,) ,符号相当于空格。在某些特殊的情况下可以用,来代替空格使用。例: c:\>dir,c:\ 10、 符号(;) ;符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回 错误报告但程序还是会继续执行。例: DIR C:\;D:\;E:\F:\ 以上的命令相当于 DIR C:\ DIR D:\ DIR E:\ DIR F:\ 当然还有些特殊的符号但他们的使用范围很小我就不再这里一一的说明了。 第三部分:批处理与变量 在批处理中适当的引用变量将会使你所编制的程序应用面更广。批处理每次能处理的变量从%0~%9共10个 。其中%0默认给批处理的文件名使用。除非在使用SHIFT命令后%0才能被%1所替代。引用shift命令的例子 如果把%1前面多加上一个%0那么结果如下: C::\>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11 SHIFT.BAT 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 11 系统是如何区分每个变量的呢,系统区分变量的规则为字符串中间的空格,即只要发现空格就把空格前面 的字符当作一个变量而空格后面的字符则作为另一个变量。如果你的变量是一个当中包含空格的长目录名 这时候你需要用上一节特殊符号8中所用的引号将他圈起来。例: 批处理内容为: ECHO %1 ECHO %2 ECHO %3 输入命令: C:\>TEST “Program Files” Program Files Program Files Program Files 在一个复杂的批处理中又可能同时使用的变量会超过10个这时候会和系统的规则想冲突那么这个问题怎么 解决呢?在系统中还有一种变量称之为环境变量(使用SET命令可以查看当前系统的环境变量)如当前系 统目录是%windir%或%SystemRoot%等。当同时使用的参数超过10个的时候,我们可以把某些在后面的程序 中还要调用的变量保存为环境变量。具体用法如 SET A=%1 这样我们就命名了一个新的环境变量A 在调用 变量A的时候要%A%这样调用,环境变量不受SHIFT命令影响。如果要改变一个环境变量需要重新对其设置 才能改变。当然也可以进行变量与变量之间的传递来达到目的。下面我们来看一个例子,批处理如下: ECHO OFF SET PASS=%1 SHIFT SET PASS1=%1 SHIFT ECHO %PASS% %PASS1% %1 %2 %3 %4 %5 %6 %7 %8 %9 SHIFT ECHO %PASS% %PASS1% %9 SET PASS=%PASS1% 变量的传递 SET PASS1=%9 SHIFT ECHO %PASS% %PASS1% %9 使用命令:C:\>TEST A B 3 4 5 6 7 8 9 10 K L A B 3 4 5 6 7 8 9 10 K 注意:这一行显示了11个变量 A B L 在使用了3次SHIFT之后%9变成了L B L 变量的传递后的结果 |