批处理常用特殊符号

1、@ 命令行回显屏蔽符

这个字符在批处理中的意思是关闭当前行的回显。
ECHO OFF可以关闭掉整个批处理命令的回显,但不能关掉ECHO OFF这个命令,现在我们在ECHO OFF这个命令前加个@,就可以达到所有命令均不回显的要求

@echo off
echo "测试"
pause
"测试"
请按任意键继续. . .

2、% 批处理变量引导符

这个百分号严格来说是算不上命令的,它只是批处理中的参数而已

1. 多个%一起使用

如果要显示%本身时,需要在前面用%来转义。

@echo off
echo 一个百分号:%%
echo 两个百分号:%%%%
echo 三个百分号:%%%%%%
pause
set /a num=4%%2
echo 4除以2的余数为 %num%
pause
@echo off
echo %0
echo %%0
pause
"E:\test\batch\11.bat"
%0
请按任意键继续. . .

2. 引用变量%var%

@echo off
set a=哈哈
echo %a%
pause
哈哈
请按任意键继续. . .

3. 调用程序外部参数用%1%9等等

%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*为命令行传递给批处理的参数

  1. %0 批处理文件本身,包括完整的路径和扩展名
  2. %1 第一个参数
  3. %9 第九个参数
  4. %* 从第一个参数开始的所有参数
  5. 参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
    例:最简单的复制文件自身的方法
    copy %0 d:\wind.bat

    3、> 重定向符##

    输出重定向命令
    这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台) 在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&,&&,||和语句块的制约限制。
    比如: 使用命令:echo hello >1.txt将建立文件1.txt,内容为hello(注意行尾有一空格)

    4、>> 重定向符

    输出重定向命令 这个符号的作用和>有点类似,但他们的区别是>>是传递并在文件的末尾追加,而>是覆盖
    用法同上
    同样拿1.txt做例子
    使用命令:
    echo hello > 1.txt echo world >>1.txt
    这时候1.txt 内容如下:
    hello world

    5、< 重定向符

    这三个命令也是管道命令,但它们一般不常用
  • <输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
    @echo off
    echo 2005-05-01>temp.txt
    date <temp.txt
    del temp.txt
    这样就可以不等待输入直接修改当前日期
@echo off
set /p str=<%0
echo %str%
pause

运行显示批处理文件自身的第一行:

@echo off

6、| 命令管道符

格式:第一条命令 | 第二条命令 [| 第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。

例如:

E:\test\batch>dir e:| find /n "bat"
[4] E:\test\batch 的目录
[9]2016/03/30  21:57                48 11.bat
[10]2016/03/28  10:06                15 2.bat
[11]2016/03/28  13:48               363 3.bat
[12]2016/03/28  11:20               216 4.bat
[13]2016/03/28  15:19               102 5.bat
[14]2016/03/29  15:36               137 6.bat

以上命令是:查找C:\所有,并发现TXT字符串。

在不使format的自动格式化参数时,我是这样来自动格式化A盘的

echo y|format a: /s /q /v:system

用过format的都知道,再格盘时要输入y来确认是否格盘,这个命令前加上echo y并用|字符来将echo y的结果传给format命令

从而达到自动输入y的目的

7、^ 转义字符

^是对特殊符号<,>,&的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。

比如

echo test ^>1.txt
::结果:test ^>1.txt,没有追加在1.txt里

另外,此转义字符还可以用作续行符号。
举个简单的例子:

@echo off
echo 英雄^
是^
男人
pause
::结果:英雄是男人

为什么转义字符放在行尾可以起到续行符的作用呢?原因很简单,因为每行末尾还有一个看不见的符号,即回车符,转义字符位于行尾时就让回车符失效了,从而起到了续行的作用。

8、& 组合命令

顺序执行

语法:第一条命令 & 第二条命令 [& 第三条命令...]
&、&&、||为组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。因为批处理认行不认命令数目

&这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。
这里&两边的命令是顺序执行的,从前往后执行。
比如:

E:\test\batch>dir z:\ & dir y:\ & dir e:\
系统找不到指定的路径。
系统找不到指定的路径。
 驱动器 E 中的卷没有标签。
 卷的序列号是 08F6-60CC

 e:\ 的目录

2016/03/28  10:15    <DIR>          test
               0 个文件              0 字节
               1 个目录 425,950,359,552 可用字节

以上命令会连续显示z,y,e盘的内容,不理会该盘是否存在

9、&& 组合命令

前面指令成功,才执行后面指令

语法:第一条命令 && 第二条命令 [&& 第三条命令...]

用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行

E:\test\batch>dir z:\ && dir y:\ && dir e:\
系统找不到指定的路径。

10、|| 组合命令

前面指令失败,才执行后面指令

语法:第一条命令 || 第二条命令 [|| 第三条命令...]

用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令。

E:\test\batch>dir z:\ || dir e:\ || dir c:\
系统找不到指定的路径。
 驱动器 E 中的卷没有标签。
 卷的序列号是 08F6-60CC

 e:\ 的目录

2016/03/28  10:15    <DIR>          test
               0 个文件              0 字节
               1 个目录 425,950,359,552 可用字节

11、"" 字符串界定符

双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法

C:\>cd "Program Files"

C:\>cd Pro*  :: C:\Program Files>

C:\>cd Progra~1  :: C:\PROGRA~1>

以上三种方法都可以进入program files这个目录
cd Progra1 这种方式貌似要输入 前6位字母1

C:\PROGRA~1>dir
 C:\PROGRA~1 的目录

2015/06/12  11:20    <DIR>          Common Files

C:\PROGRA~1>cd com~1
系统找不到指定的路径。

C:\PROGRA~1>cd Comm~1
系统找不到指定的路径。

C:\PROGRA~1>cd Commo~1
系统找不到指定的路径。

C:\PROGRA~1>cd Common~1 :: C:\PROGRA~1\COMMON~1>

12、, 逗号

逗号相当于空格,在某些情况下“,”可以用来当做空格使

比如

dir,c:\

13、; 分号

分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。(有人说不会继续执行,其实测试一下就知道了)

例1:

dir c:\;d:\;e:\;z:\

以上命令相当于

dir c:\
dir d:\
dir e:\
dir z:\

不同的是:如果其中z盘不存在

E:\test\batch>dir c:\;d:\;e:\;z:\
系统找不到指定的路径。

例2:

dir c:\;e:\1.txt

以上命令相当于

dir c:\
dir e:\1.txt

其中文件e:\1.txt不存在,但e盘存在,有错误提示,但命令仍会执行。

E:\test\batch>dir c:\;e:\1.txt
 c:\ 的目录
2015/11/23  15:20    <DIR>          data
              22 个目录 15,621,087,232 可用字节

 驱动器 E 中的卷没有标签。
 卷的序列号是 08F6-60CC

 e:\ 的目录

找不到文件

如果目标路径不存在,则终止执行;如果路径存在,仅文件不存在,则继续执行。

14、() 括号

小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。
括号在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用,请看例子。
例:
命令:

echo 1 & echo 2 & echo 3
::可以写成:
(
echo 1
echo 2
echo 3
)

上面两种写法效果一样,这两种写法都被视为是一条命令行。
注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。

15、! 感叹号

没啥说的,在变量延迟问题中,用来表示变量,即%var%应该表示为!var!,请看setlocal命令介绍。

http://xiangkg.blog.163.com/blog/static/5668850420101268115584


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:批处理常用特殊符号

文章字数:2.5k

本文作者:Bin

发布时间:2016-03-30, 20:28:26

最后更新:2019-08-06, 00:48:18

原始链接:http://coolview.github.io/2016/03/30/%E6%89%B9%E5%A4%84%E7%90%86%E5%B8%B8%E7%94%A8%E7%89%B9%E6%AE%8A%E7%AC%A6%E5%8F%B7/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录