批处理常用特殊符号
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 %*
为命令行传递给批处理的参数
%0
批处理文件本身,包括完整的路径和扩展名%1
第一个参数%9
第九个参数%*
从第一个参数开始的所有参数- 参数
%0
具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
例:最简单的复制文件自身的方法copy %0 d:\wind.bat
3、> 重定向符##
输出重定向命令
这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台) 在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&,&&,||和语句块的制约限制。
比如: 使用命令:echo hello >1.txt
将建立文件1.txt
,内容为hello
(注意行尾有一空格)4、>> 重定向符
输出重定向命令 这个符号的作用和>有点类似,但他们的区别是>>是传递并在文件的末尾追加,而>是覆盖
用法同上
同样拿1.txt做例子
使用命令:
这时候1.txt 内容如下:echo hello > 1.txt echo world >>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" 转载请保留原文链接及作者。