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

server/2025/1/24 0:42:27/

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

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


本章内容主要学习要点:

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

重定向符 >、>>

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

例1

echo hello120 >1.txt

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

例2

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

例3

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

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

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

例1

echo hello120 >>1.txt

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

例2

echo hello> 1.txt
echo world>>1.txt

这时候 1.txt内容如下:

hello
world

命令管道符 |

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

例1

tasklist | find /i "qq.exe" && taskkill /f /im qq.exe

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

例2

echo Y|rd /s c:\abc

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

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

组合命令 &&&||

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

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

例1

dir z:\ & dir y:\ & dir c:\

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

&&符号允许同时执行多条命令,当碰到执行出错的命令后将不再执行后面的命令,如果一直没有出错则一直执行完所有命令。
格式:第一条命令 && 第二条命令 [&& 第三条命令...]

例2

dir z:\ && dir y:\ && dir c:\

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

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

例3

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 文件中。

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

dir c:\ && dir d:\ > a.txt

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

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

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

@echo off 
echo 这是^
一个^
句子
Pause

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

变量引导符 %

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

例1

@echo off
set str=abc
echo 变量 str 的值是: %str%
pause

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

变量 str 的值是: abc
按任意键继续...

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

例2

@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

@echo off
set /a num=4%%2
echo 4除以2的余数为 %num%
pause

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

例4

@echo off
echo 一个百分号:%%
echo 两个百分号:%%%%
echo 三个百分号:%%%%%%
pause

界定符 ""

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

例1

cd /d cd "d:\program files\^%*abc"

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

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

例2

@echo off
set "var=abc 123"
echo %var%
pause

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


http://www.ppmy.cn/server/160890.html

相关文章

C++ 智能指针(八股总结)

C中的智能指针有哪些&#xff0c;各自有什么作用? 智能指针主要解决一个内存泄露的问题&#xff0c;它可以自动地释放内存空间。因为它本身是一个类&#xff0c;当函数结束的时候会调用析构函数&#xff0c;并由析构函数释放内存空间。智能指针分为共享指针(shared_ptr), 独占…

服务器安装ESXI7.0系统及通过离线包方式升级到ESXI8.0

新到了一台物理服务器需要安装系统&#xff0c;项目不急用&#xff0c;先拿来做些实验。 本次实验目标&#xff1a; 1、在物理服务器上安装ESXI7.0系统&#xff1b; 2、通过离线包升级方式将ESXI7.0升级为ESXI8.0。 实验环境准备&#xff1a; 物理服务器1台&#xff0c;型号…

【C++】在线五子棋对战项目网页版

目录 1.Websocket 1.1.Websocket的简单认识 1.2.什么是轮询呢&#xff1f; 1.3.websocket协议切换过程 1.4.websocketpp库常用接口认识 1.5.websocketpp库搭建服务器流程 1.6.websocketpp库搭建服务器 2.mysqlclient库-接口认识 3.项目模块的划分&#xff1a; 4.项目…

“推理”(Inference)在深度学习和机器学习的语境

“推理”&#xff08;Inference&#xff09;在深度学习和机器学习的语境中&#xff0c;是指使用经过训练的模型对新数据进行预测的过程。将其简单地理解为“模型的应用阶段”。在这一阶段&#xff0c;我们不再进行模型训练&#xff0c;而是利用已训练好且保存下来的模型来获取对…

react上增加错误边界 当存在错误时 不会显示白屏

react上增加错误边界 当存在错误时 不会显示白屏 定义&#xff1a;错误边界是一个 React 组件&#xff0c;它会在其子组件树中的任何位置捕获 JavaScript 错误&#xff0c;并显示一个备用的 UI 而不是崩溃的组件树 在总项目的组件中创建文件&#xff1a; src/components/Erro…

adb常用指令(完整版)

1、adb devices 查看是否连接到设备 2、adb install [-r] [-s] 安装app&#xff0c;-r强制&#xff0c;-s安装sd卡上 3、adb uninstall [-k] 卸载app&#xff0c;-k保留配置和参数 4、adb push 把本地文件上传设备 5、adb pull 下载文件到本地 6、cd D:\sdk\platform-tool…

ASP.NET Core--依赖注入(DI)--在ASP.NET Core中使用依赖注入

一、在ASP.NET Core中实现依赖注入 1.1 配置依赖注入 在ASP.NET Core中实现依赖注入的第一步是配置依赖注入。ASP.NET Core使用了一个称为依赖注入容器&#xff08;DI Container&#xff09;的组件来管理对象之间的依赖关系。DI容器在应用程序启动时被配置&#xff0c;并且可…

深度学习系列75:sql大模型工具vanna

1. 概述 vanna是一个可以将自然语言转为sql的工具。简单的demo如下&#xff1a; !pip install vanna import vanna from vanna.remote import VannaDefault vn VannaDefault(modelchinook, api_keyvanna.get_api_key(my-emailexample.com)) vn.connect_to_sqlite(https://va…