计算机技术基础 (bat 批处理)Note4

计算机技术基础 (bat 批处理)Note4

本节主要讲解一些 bat 批处理文件中的一些特殊符号,包括 @, %, >>>, |, ^, &&&||, " ", ,, ;, ()

回显屏蔽符 @

回显屏蔽符 @: 这个字符在批处理中的意思是关闭当前行的回显。
ECHO OFF 可以关闭掉整个批处理命令的回显,但不能关掉 ECHO OFF 这个命令的本身回显,我们常常在 ECHO OFF 这个命令前加 @ 就可以起到所有命令均不回显的作用。详细在 Note1 中有介绍,这里不多举例了。

变量引导符 %

变量引导符 %:这个 % 严格来说算不上命令,它只是批处理中的参数而已(多个 % 一起使用的情况除外,以后会详细介绍)。
引用变量用 %var% (var 代表变量名),调用程序外部参数用 %1%9 等等
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*为命令行传递给批处理的参数
%0 批处理文件本身,包括完整的路径和拓展名
%1 第一个参数
%9 第九个参数
%* 从第一个参数开始的所有参数
参数 %0 具有特殊功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
举例:

@echo off  
set var1=123
echo %var1%
pause

结果:

C:\Users\rwq119\Desktop\test>exercise1.bat
123
Press any key to continue . . .

重定向符 >>>

重定向符 > :输出重定向命令,这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围。
重定向符 >>:这个符号的作用和 > (大于号)有点类似,但他们的区别是 >> 是传递并在文件的末尾追加内容,而 > 是覆盖。
示例:

@echo off  
echo 1 
echo 2 > res.txt
echo 3

运行后生成文件 res.txt :

在这里插入图片描述
我们再运行一遍,效果一样还是生成一个 res.txt,里面只有 2。这是因为再运行 echo 2 > res.txt 的时候,原来的 res.txt 被覆盖了,重新生成一个新的文件。
如果用 >>

@echo off  
echo 1 > res.txt
echo 2 >> res.txt
echo 3 >> res.txt

echo 1 > res.txt 会先生成一个 res.txt,并往里打印1。后面的 >> 会向这个文件追加打印 2,3,不会覆盖原来的文件。

在这里插入图片描述

命令管道符 |

格式:第一条命令 | 第二条命令 [| 第三条命令...] 意思是将第一条命令的结果作为第二条命令的参数来使用。
比如: dir C:\| find “txt” 以上命令是,查找 C:\ 所有,并发现 TXT 的 文本文档。

转义字符 ^

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

 echo 1234 ^>1234.txt 

结果直接打印

echo 1234 ^>1234.txt

另外,转义字符还可以用作续航符号,比如:

@echo off  
echo 1^
2^
3^
4^
5
pause

结果:

12345
Press any key to continue . . .

组合命令 &&&||

组合命令 &&&|| 为组合命令,顾名思义,就是可以把多个命令组合起来当成一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。
(1)& (AND) 这个符号允许一行中使用两个以上的不同命令,当第一个命令执行失败了,也不影响后面的命令执行。这里 & 两边的命令是顺序执行的,从前往后执行。
语法:第一条命令 & 第二条命令 [& 第三条命令 ...]
示例:

dir Z:\ & dir y:\ & dir C:\

此命令会连续显示 z,y,c 盘符的内容,不理会该盘是否存在

C:\Users\rwq119>dir Z:\ & dir y:\ & dir C:\
The system cannot find the path specified.
The system cannot find the path specified.
 Volume in drive C is Windows
 Volume Serial Number is AA04-7A06

 Directory of C:\

02/21/2023  12:43 PM    <DIR>          nm75g64
12/07/2019  11:14 AM    <DIR>          PerfLogs
06/13/2024  10:29 AM    <DIR>          Program Files
07/18/2024  10:40 AM    <DIR>          Program Files (x86)
08/25/2023  05:18 PM    <DIR>          RBuildTools
02/20/2023  05:52 PM    <DIR>          rtools42
02/08/2023  01:27 PM    <DIR>          SMSTSLog
04/03/2024  05:09 PM    <DIR>          Temp
02/20/2023  11:29 AM    <DIR>          Users
07/10/2024  10:35 AM    <DIR>          Windows
               0 File(s)              0 bytes
              10 Dir(s)  37,157,269,504 bytes free

(2)&& 用这个符号可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令。
示例:

dir Z:\ && dir y:\ && dir C:\

这里第一条命令执行失败,后面的命令也不会执行

C:\Users\rwq119>dir Z:\ && dir y:\ && dir C:\
The system cannot find the path specified.

(3)|| (注意是两个 |, 与管道符号 | 区别) 组合命令 或 ,用这个可以执行多条命令,当第一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令
语法:第一条命令 || 第二条命令 [ || 第三条命令 ...]

dir Z:\ || dir C:\ || dir C:\ || dir y:\

结果:

C:\Users\rwq119>dir Z:\ || dir C:\ || dir C:\ || dir y:\
The system cannot find the path specified.
 Volume in drive C is Windows
 Volume Serial Number is AA04-7A06

 Directory of C:\

02/21/2023  12:43 PM    <DIR>          nm75g64
12/07/2019  11:14 AM    <DIR>          PerfLogs
06/13/2024  10:29 AM    <DIR>          Program Files
07/18/2024  10:40 AM    <DIR>          Program Files (x86)
08/25/2023  05:18 PM    <DIR>          RBuildTools
02/20/2023  05:52 PM    <DIR>          rtools42
02/08/2023  01:27 PM    <DIR>          SMSTSLog
04/03/2024  05:09 PM    <DIR>          Temp
02/20/2023  11:29 AM    <DIR>          Users
07/10/2024  10:35 AM    <DIR>          Windows
               0 File(s)              0 bytes
              10 Dir(s)  37,158,957,056 bytes free

C:\Users\rwq119>

补充:如何判定命令是否失败了?
不是靠自己的主观判断和输出提示来判断的,而是去检测 ErrorLevel这个变量的值 如果是 0 表示成功,非0 表示失败。
可以 用 echo %ERRORLEVEL% 来查看 上一条命令是否执行失败 (可以多次查询,echo 命令不会重置 ErrorLevel 的值)
示例:

C:\Users\rwq119>dir C:\
 Volume in drive C is Windows
 Volume Serial Number is AA04-7A06

 Directory of C:\

02/21/2023  12:43 PM    <DIR>          nm75g64
12/07/2019  11:14 AM    <DIR>          PerfLogs
06/13/2024  10:29 AM    <DIR>          Program Files
07/18/2024  10:40 AM    <DIR>          Program Files (x86)
08/25/2023  05:18 PM    <DIR>          RBuildTools
02/20/2023  05:52 PM    <DIR>          rtools42
02/08/2023  01:27 PM    <DIR>          SMSTSLog
04/03/2024  05:09 PM    <DIR>          Temp
02/20/2023  11:29 AM    <DIR>          Users
07/10/2024  10:35 AM    <DIR>          Windows
               0 File(s)              0 bytes
              10 Dir(s)  37,154,279,424 bytes free

C:\Users\rwq119>echo %ERRORLEVEL%
0

C:\Users\rwq119>echo %ERRORLEVEL%
0

C:\Users\rwq119>dir c
 Volume in drive C is Windows
 Volume Serial Number is AA04-7A06

 Directory of C:\Users\rwq119

File Not Found

C:\Users\rwq119>echo %ERRORLEVEL%
1

C:\Users\rwq119>echo %ERRORLEVEL%
1

命令优先级

注意:组合命令和重定向命令一起使用的时候要注意优先级
管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令
等级高 | 【管道符】
等级中 > 【重定向符】
等级低 & 【组合命令】
(批处理在执行命令时,优先处理等级高的特殊符号)

字符串界定符 " "

双引号 " "(注意单引号不行),允许在字符串中包含空格。
比如进入一个特殊目录可以用如下方法:

cd "program files"
cd progra~1
cd pro*

以上三种方法都可以进入 program files 这个目录

其他使用 " " 例子:

dir "program files"

逗号命令 ,

逗号 ,,相当于空格,在某种情况下可以当做空格来使用
示例:

dir,C:\

结果 (和 dir C:\ 一样):

C:\Users\rwq119>dir,C:\
 Volume in drive C is Windows
 Volume Serial Number is AA04-7A06

 Directory of C:\

02/21/2023  12:43 PM    <DIR>          nm75g64
12/07/2019  11:14 AM    <DIR>          PerfLogs
06/13/2024  10:29 AM    <DIR>          Program Files
07/18/2024  10:40 AM    <DIR>          Program Files (x86)
08/25/2023  05:18 PM    <DIR>          RBuildTools
02/20/2023  05:52 PM    <DIR>          rtools42
02/08/2023  01:27 PM    <DIR>          SMSTSLog
04/03/2024  05:09 PM    <DIR>          Temp
02/20/2023  11:29 AM    <DIR>          Users
07/10/2024  10:35 AM    <DIR>          Windows
               0 File(s)              0 bytes
              10 Dir(s)  37,178,507,264 bytes free

分号命令 ;

推荐直接使用 空格
当命令相同时,可以将不同目录用来隔离开来,但执行效果不变,如果执行过程中发生错误,则只返回错误报告,但程序仍会执行。
事实上, ; 对批处理来说只是用来分隔的符号,把 ; 替换成空格 也可以达到这种效果,并且更规范
比如,有一个 bat 文件代码如下:

dir c:\;d:\;e:\;z:\
echo bat is continue
pause

结果:

C:\Users\rwq119\Desktop\test>dir c:\;d:\;e:\;z:\
The system cannot find the path specified.

C:\Users\rwq119\Desktop\test>echo bat is continue
bat is continue

C:\Users\rwq119\Desktop\test>pause
Press any key to continue . . .

第一行的 dir c:\;d:\;e:\;z:\ 此命令相当于 同时要做

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

但是我们电脑没有 d,e,z 盘,dir c:\;d:\;e:\;z:\ 会执行失败,返回错误报告,但是后面 echo bat is continue 依然执行。
事实上, 所能达到的效果是一样的 (更推荐)
有一个,bat 文件如下

dir c:\ d:\ e:\ z:\
echo bat is continue
pause

执行结果一样:

C:\Users\rwq119\Desktop\test>dir c:\ d:\ e:\ z:\
The system cannot find the path specified.

C:\Users\rwq119\Desktop\test>echo bat is continue
bat is continue

C:\Users\rwq119\Desktop\test>pause
Press any key to continue . . .

逗号也一样 ,

C:\Users\rwq119\Desktop\test>dir c:\,d:\,e:\,z:\
The system cannot find the path specified.

C:\Users\rwq119\Desktop\test>echo bat is continue
bat is continue

C:\Users\rwq119\Desktop\test>pause
Press any key to continue . . .

括号命令 ()

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

echo 1 & echo 2 & echo 3

也可以写成:

(
echo 1 
echo 2 
echo 3
)

这后面的 () 需要在批处理文件中使用,或者在 cmd 中一行一行的输入。(在 cmd 中使用 ( 他会问你 是否要输入更多命令 More? 直到你输入另一个 ) 为止)。无论是bat文件还是cmd中,不能打成一行否则效果不对(后面的内容会被 echo 打印出),错误示范如下:

C:\Users\rwq119>(echo 1 echo 2 echo 3)
1 echo 2 echo 3

备注:
这个是自学 b 站up主 程序员血月做的笔记。原视频链接:
https://space.bilibili.com/327484473/channel/seriesdetail?sid=2069394
因本人水平有限,如有任何问题,欢迎大家批评指正!

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值