CMD批处理命令入门(6)——常用的特殊字符

CMD批处理命令入门(6)------特殊字符

  • 本章内容主要学习要点:
  • [重定向符 `>、>>`](#重定向符 >、>>)
  • [命令管道符 `|`](#命令管道符 |)
  • [组合命令 `&`、`&&`、`||`](#组合命令 &&&||)
  • [转义字符 `^`](#转义字符 ^)
  • [变量引导符 `%`](#变量引导符 %)
  • [界定符 `""`](#界定符 "")

本章内容主要学习要点:

  1. >、>>重定向符
  2. | 命令管道符
  3. &、&&、|| 组合命令
  4. ^ 转义字符
  5. % 变量引导符
  6. "" 界定符

重定向符 >、>>

> 重定向符, 意思是传递并且覆盖,它所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台,即命令提示符)。

例1

bash 复制代码
echo hello120 >1.txt

新建立文件 1.txt,内容为"hello120" (注意:行尾有一空格,文件后有一空行)

例2

bash 复制代码
 (echo hello120)>1.txt   #新建立文件 1.txt,内容为"hello120" (注意:行尾无空格,但文件后有一空行)
>1.txt echo hello120      #新建立文件 1.txt,内容为"hello120" (注意:行尾无空格,但文件后有一空行)

例3

bash 复制代码
>1.txt <nul set /p=hello120  或 >1.txt set /p=hello120<nul
#新建立文件 1.txt,内容为"hello120" (注意:行尾无空格,且文件后也无空行)

注意:
如果上面的例子中1.txt原来有内容的话,在使用了> 重定向符命令后,将会被新的内容覆盖掉,这个一定要注意!

>> 重定向符将命令的输出结果追加到其后面的设备中去。这个符号的作用和>有点类似,但他们是有区别的 >>是传递并在文件的末尾追加,而>是覆盖。用法同>一样的。

例1

bash 复制代码
echo hello120 >>1.txt

如果1.txt不存在,则新建立文件 1.txt,内容为"hello120 ";如果1.txt存在,则把内容为"hello120 "追加到其文末尾。

例2

bash 复制代码
echo hello> 1.txt
echo world>>1.txt

这时候 1.txt内容如下:

bash 复制代码
hello
world

命令管道符 |

表示把在它之前的命令或语句的执行结果作为在它之后的命令或语句的处理对象,简而言之,就是把它之前的输出作为它之后的输入。

例1

bash 复制代码
tasklist | find /i "qq.exe" && taskkill /f /im qq.exe

tasklist(进程列表)用传递符"|" 传递给 find 命令,执行查找QQ的进程。

例2

bash 复制代码
echo Y|rd /s c:\abc

通过管道命令|echo y 的结果传给rd /s c:\abc 命令,从而达到自动输入y 的目的。

注意,管道命令 | 的输入方法,shift\

组合命令 &&&||

&&&|| 为组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。

&符号允许同时执行多条命令,当第一个命令执行失败了,也不影响后边的命令执行。这里 & 两边的命令是顺序执行的,从前往后执行。

格式:第一条命令 & 第二条命令 [& 第三条命令...]

例1

bash 复制代码
dir z:\ & dir y:\ & dir c:\

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

&&符号允许同时执行多条命令,当碰到执行出错的命令后将不再执行后面的命令,如果一直没有出错则一直执行完所有命令。

格式:第一条命令 && 第二条命令 [&& 第三条命令...]

例2

bash 复制代码
dir z:\ && dir y:\ && dir c:\

这个命令和上面的类似,但区别是,前一个命令执行失败时,后边的命令就不会再执行了。

||符号允许同时执行多条命令,当一条命令执行失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令。

格式:第一条命令 || 第二条命令 [|| 第三条命令...]

例3

bash 复制代码
tasklist | find /i "qq.exe" && taskkill /f /im qq.exe || echo 你开了QQ?我不信

通过&&||两个符号可以认为把上例分成了三个命令:

第一个命令::tasklist | find /i "qq.exe"

第二个命令:taskkill /f /im qq.exe

第三个命令:echo 你开了QQ?我不信

这里我们分析一下,如果找不到QQ进程,即第一个命令执行失败,则 && 不会执行第二个命令:taskkill命令,由于taskkill 命令没有执行,视作第二个命令执行失败,则 || 将会执行第三个命令:echo 命令。

如果找到QQ进程,即第一个命令执行成功,则 && 将会执行第二个命令:taskkill命令,由于第二个命令执行成功,|| 将不会执行第三个命令:echo 命令。

★管道命令 | | 的输入方法,输入两次shift键 \

★组合命令和重定向命令、管道命令一起使用必须注意优先级。管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令。

思考:

把C 盘和 D 盘的文件和文件夹列出到a.txt 文件中。

你可能马上的写出了下面的命令:

bash 复制代码
dir c:\ && dir d:\ > a.txt

这样执行后a.txt 里只有D盘的信息!为什么?因为组合命令的优先级没有重定向命令的优先级高!所以命令在执行时将被分成两部分:dir c:\dir d:\ > a.txt

这里要使用组合命令&&达到题目的要求,我们可以这样写:

bash 复制代码
dir c:\ > a.txt && dir d:\ >> a.txt

这样,依据优先级高低,DOS 将把这句话分成以下两部分:dir c:\ > a.txtdir d:\ >> a.txt

当然,我们也可以这样写:dir c:\ > a.txt & dir d:\ >> a.txt

转义字符 ^

一般而言,^ 以转义字符的身份出现。

因为在cmd环境中,有些字符具备特殊功能,如 >>>表示重定向,| 表示管道,&&&|| 表示语句连接......它们都有特定的功能,如果需要把它们作为字符输出的话,echo >echo | ......之类的写法就会出错------cmd 解释器会把它们作为具有特殊功能的字符对待,而不会作为普通字符处理,这个时候,就需要对这些特殊字符做转义处理:在每个特殊字符前加上转义字符^

因此,要输出这些特殊字符,就需要用 echo ^>echo ^|echo ^|^|echo ^^......之类的格式来处理;

另外,此转义字符还可以用作续行符号。

例1

bash 复制代码
@echo off 
echo 这是^
一个^
句子
Pause

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

变量引导符 %

①当百分号成对出现,并且其间包含非特殊字符时,一般做变量引用处理,比如:%var%%str%

例1

bash 复制代码
@echo off
set str=abc
echo 变量 str 的值是: %str%
pause

在屏幕上将显示这样的结果:

bash 复制代码
变量 str 的值是: abc
按任意键继续...

②另外,百分号作为变量引用还有一种特殊形式,那就是对形式参数的引用,此时,单个百分号后面紧跟0~9这10个数字,如 %0、%1、%2 。。。%0 表示批处理文件本身,包括完整的路径和扩展名%1%9 表示第一个参数至第九个参数

例2

bash 复制代码
@echo off
if defined str goto next
set str=
set /p str=请把文件拉到本窗口后回车:
call "%~0" %str%
pause
:next
cls
echo 本批处理文件完整路径为:"%~0"
echo 拖到本窗口的文件完整路径为:"%~1"
goto :eof

③出现在 set /a 语句中时,表示两数相除取余数,也就是所谓的模运算,它在命令行窗口和批处理文件中的写法略有差异:在命令行窗口中,只需要单个的%,在批处理文件中,需要连续两个百分号,写成%%

例如:在命令行窗口中,运行 set /a num=4%2 ,则结果将显示0,因为4除以2的余数为0

如果保存为批处理文件,则此语句将略有改变:

例3

bash 复制代码
@echo off
set /a num=4%%2
echo 4除以2的余数为 %num%
pause

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

例4

bash 复制代码
@echo off
echo 一个百分号:%%
echo 两个百分号:%%%%
echo 三个百分号:%%%%%%
pause

界定符 ""

①在表示带有空格或特殊符号的路径时常要用""来将路径括起来。

例1

bash 复制代码
cd /d cd "d:\program files\^%*abc"

因为路径中带有空格和特殊符号,所以要用""将路径括起来。

②表示其中的内容是一个完整的字符串。

例2

bash 复制代码
@echo off
set "var=abc 123"
echo %var%
pause

这里表示变量var的值为字符串"abc 123"。

相关推荐
ι:3 小时前
NUC12 Pro 安装 Ubuntu 24.04 LTS 详细教程
linux·windows·ubuntu·nuc
YCOSA20254 小时前
微软宣布将于10月7日举行Windows与Surface发布会,聚焦“Windows、NVIDIA RTX Spark、Surface,以及更广泛PC生态”
windows
Source.Liu4 小时前
【A11】 labelprinter(Tauri 版)新建步骤
windows·rust
Punchline2785 小时前
解决 Windows 环境变量 Path 设置时提示“字符太长”的完整指南
windows·环境变量·path
chushiyunen6 小时前
claude code笔记(二)、claude桌面端(内网不好用)
windows
d_benhua6 小时前
以太网测试步骤
windows
宝桥南山6 小时前
Microsoft Fabric - 简单尝试一下Microsoft Fabric .NET SDK
microsoft·微软·.net·.netcore·powerbi·fabric
hqyjzsb7 小时前
规划工商管理大学成长:搭建四层能力体系,重视高阶的 AI 能力建设
开发语言·人工智能·python·microsoft·职场和发展·数据挖掘·业界资讯
冯一川7 小时前
DeepSeek在Windows系统上部署
windows·python
解道Jdon8 小时前
JDK 27发布:紧凑对象头、G1默认、量子安全TLS
ide·windows·git·svn·eclipse·github·visual studio