BAT批处理文件 特殊符号

0.@命令行回显屏蔽符

开启了echo off能够起到隐藏命令的效果,而@同样能起到这个效果,只不过需要在每条命令前面都加一个

1.&

“用来分隔一个命令行中的多个命令”,官方的这种解释,其实是从解释器的角度出发的。如果按人的角度来说的话,应该是“连接多条命令”。
比如我要输出 hello 和 world 2行文本,用”&“将两条echo命令连接。

代码如下:

@echo off
echo hello & echo world
pause

“&”在使用中最常出现的问题是变量延迟,关于这个问题,可以参考批处理for语句从入门到精通中关于这个知识点的部分。

2.&&

输出 hello 和 world 2行文本,用”&&“将两条echo命令连接。

代码如下:

@echo off
echo hello && echo world
pause

执行的结果和用"&“链接两条命令时一模一样,那么”&“和”&&"功能一样吗?
答案是:它们的功能完全不同,这种一样的结果不过是一种巧合罢了。
”&“的作用不过是链接多条命令,而”&&“是为了判断符号前的命令是否执行成功,从而决定是否执行符号后的命令。
这里举一个例子来加以说明:

代码如下:
C:\Users\helloworld\Desktop>start “” “111.txt” && echo hello
系统找不到文件 111.txt。
C:\Users\helloworld\Desktop>start “” “111.txt” & echo hello
系统找不到文件 111.txt。
hello
用start命令打开一个不存在的文件,由于文件是不存在的,所以start命令执行失败,这时用"&&"链接的命令”echo hello“没有执行,而用”&“链接的执行了。
”&&“的这种特性,让它成为了特殊的条件运算符。

3.||

执行符号前的命令失败就执行符号后的命令
&&的否定操作就是||。

代码如下:
C:\Users\helloworld\Desktop>start “” “111.txt” || echo hello
系统找不到文件 111.txt。
hello

4. |

|符号为管道符号
出现这个符号, 一般为将|前面的结果给|后面的参数进行处理

代码如下:
echo 12345|findstr “1”

这一段代码中, |前面是显示12345的字符数据, 那么结果就是12345
再看|后面, 用了findstr来查找字符1, 那么这里|前面是12345
那么就是说将12345传递给|后面的findstr来查找字符1

5. ErrorLevel

ErrorLevel由两个单词构成,一个Error(错误),一个Level(等级),如果综合这两个单词,字面意义其实就是”错误数量“或者”错误类型“。
如果命令执行成功,那么”错误数量“自然是零。如果执行失败,那么”错误数量“就是非零。

6.^分行与转义符

1.分行
可以把一个命令写成多行哦
例:

@echo 1^
2^
3^
4
@pause>nul

复制上面的命令,执行结果是什么?这就是分行符的作用

2.转义
当我们试图输出一个&的时候,我们会发现输出不了…因为它被当成分行符处理了
这时就要请出转义符^了,它可以剥夺后面第一个符号的特殊地位,变为普通符号(这其实是一个很神奇的功能,之所以神奇…赘不详述)
例:

@echo ^&
@pause>nul

这样就输出了&
另外,当存在a变量(前面set /p a=或set a=给a赋值了)想要输出%a%,一是可以用转义符^,还可以:
echo %%a%%
这样既可将两个百分号识别为一个,起到了转义的作用
还有些特殊情况不需要转义:
echo “0000|000”
用引号括起来可以起到一定的转义的作用,包括set "a=a的值"等
但特别特殊的情况比如获取%1时存在转义符很难处理,没办法正常引用

7.*,?-通配符

啥叫通配符?举个例子吧,*.jpg表示所有的jpg,*表示所有文件.现在你明白了吗? 那"?"有什么用,*可以为任意字符,但?只表示一个字符,比如?.jpg只表示文件名只有一个的jpg文件,比如1.jpg,比.jpg什么

8.>,>>,<,>,<& -重定向符

>,>>

在这里请注意: 在重定向符号 “>” 以及 “>>” 前必须添加空格以防万一,因为Batch具有不唯一性所以在很多时候不加空格也能正常使用。但是日常使用中必须添加空格否则失败的几率很大,要么是无法创建/输出,要么文件是空的。
请不要使用不添加空格的不正确用法!

echo 123 >>one.txt

可以输出123追加到one.txt中

echo 123 >one.txt

可以输出123覆盖one.txt中原先的内容

<、>、<&

这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。(本人已查过,网上也查不到相关资料)
<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。

@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt

这样就可以不等待输入直接修改当前日期
>,将一个句柄的输出写入到另一个句柄的输入中。
<,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。
常用句柄:0、1、2,未定义句柄:3—9
1>nul 表示禁止输出正确的信息
2>nul 表示禁止输出错误信息。
其中的1与2都是代表某个数据流输入输出的地址(NT CMD 称之为句柄,MSDOS称之为设备)。
句柄0:标准输入stdin,键盘输入
句柄1:标准输出stdout,输出到命令提示符窗口(console,代码为CON)
句柄2:标准错误stderr,输出到命令提示符窗口(console,代码为CON)
其中的stdin可被<重定向,stdout可被>、>>重定向。
我们已经知道读取文本中的内容可以用for命令,但如果只需要读取第一行用for命令就有点麻烦。简单的办法如下:

@echo off
set /p str=<%0
echo %str%
pause

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

9.nul

nul是一个系统保留字,所以>nul不会输出到任何文件,可以起到隐藏命令执行结果的效果
2 >nul可以起到隐藏命令失败执行结果的效果
<可以从文件中读取数据到某个命令中,不过这个命令得等待用户输入
例:

@echo off
echo 123 >>00.txt
set /p num=<00.txt
echo 数字是%num%
pause>nul

有些命令不止需要一个>nul,如要连接,需要:>nul 2>nul以此类推
如果前面有数字,需要添加空格
ping >nul 2>nul
=1>nul 2>nul ping
=ping >nul 2>&1… X>&2 X>&2 X>&3等
nul指空设备,简单来说就是隐藏输出。
2>&1 3>&2 可以一直接下去,&1 &2就是引用第一个、第二个等

10.()

()-括起来
括起来的语句是一个整体
小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。
括号在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用,请看例子。
例:
命令:echo 1 echo 2 & echo 3
可以写成:
(
echo 1
echo 2
echo 3
)
上面两种写法效果一样,这两种写法都被视为是一条命令行。
注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。

11.%

%批处理变量引导符
这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个%一起使用的情况除外,以后还将详细介绍)。
引用变量用%var%,调用程序外部参数用%1至%9等等
%0%1%2%3%4%5%6%7%8%9%为命令行传递给批处理的参数
%0 批处理文件本身,包括完整的路径和扩展名
%1 第一个参数
%9 第九个参数
%
从第一个参数开始的所有参数
参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
例:最简单的复制文件自身的方法
copy %0 d:\wind.bat
小技巧:添加行内注释
%注释内容%(可以用作行内注释,不能出现重定向符号和管道符号)
为什么这样呢?此时“注释内容”其实被当作变量,其值是空的,故只起注释作用,不过这种用法容易出现语法错误,一般不用。

12. ""字符串界定符

双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
cd “program files”
cd progra~1
cd pro*
以上三种方法都可以进入program files这个目录

13. , 逗号

逗号相当于空格,在某些情况下“,”可以用来当做空格使
比如
dir,c:\

14. ; 分号

分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。(有人说不会继续执行,其实测试一下就知道了)
比如:
dir c:\;d:\;e:\;z:\
以上命令相当于
dir c:\
dir d:\
dir e:\
dir f:\
如果其中z盘不存在,运行显示:系统找不到指定的路径。然后终止命令的执行。
例:dir c:\;d:\;e:\1.txt
以上命令相当于
dir c:\
dir d:\
dir e:\1.txt
其中文件e:\1.txt不存在,但e盘存在,有错误提示,但命令仍会执行。

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

15.!感叹号

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

参考:https://baike.baidu.com/item/bat/365230?fr=aladdin

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值