1. echo命令简介

echo是我们学习Batch批处理语言的时候第一个接触到的命令,它的作用类似于我们C语言里面的print(),作用就是能在我们程序运行的过程中,显示一些信息出来,好让我们知道我们的程序执行到了哪里,在我们调试程序的时候也会起到一个相当重要的作用。

2. echo命令的用法

2.1 最直接的用法

直接echo+空格+要显示的内容,所有的命令必须有空格隔开

echo hello world

但是我们这样做的时候回发现,当我们运行bat文件的时候,CMD窗口一闪而过,一下就没了,根本无法看到显示了什么,那么怎么办呢?
在代码的末行加入pause即可让窗口停留,pause的功能是暂停程序的运行,需要我们点击任意按键才能继续运行。
加入后的代码如下:

echo hello world
pause

运行后我们能在窗口中看到如下图所示的内容:
在这里插入图片描述
可以看到我们要显示的“hello world”有显示出来,但是还显示出了很多的其他内容,多余的内容是echo的回显功能,显示的是当前执行的程序所在的位置。

2.2 回显功能

我们可以使用符号@来屏蔽掉回显的内容,代码1如下

@echo hello world
pause

代码1出来的效果是这样的:
在这里插入图片描述
我们只在第一行加入了@符号,所以第一行的回显不见, 我们第二行的pause没有加@符号,所以回显仍然存在。
我们现在试试两行都加入回显的效果:

@echo hello world
@pause

在这里插入图片描述
可以看到两行的回显都关闭了。
@这个符号在批处理中的作用就是屏蔽掉当前行的回显。
那么我们要关闭所有的回显是不是要每一行都加个@呢?
如果我们的代码很长,那全部加岂不是得累死,办法是有的

可以用echo off来关闭后面代码的回显
例如:

echo off
echo hello world
pause

在这里插入图片描述
我们看到echo off后面两行代码的回显是关闭了,可是echo off本身的回显并没有关闭啊,怎么办?
@echo off来关闭所有代码的回显
我们上面学习过了,符号@可以用来关闭当前命令行的回显,所以用@配合echo off使用,就能关闭所有的回显啦。
测试代码如下:

@echo off
echo hello world
pause

在这里插入图片描述
代码第一行的回显不见了。
但是 要注意的是@echo off这个命令只能关闭从该命令的所在的行数开始后面的命令,并不能关闭之前的回显,
比如下面的代码:

echo hello
@echo off
echo world
pause

在这里插入图片描述
可以看到第一行的回显并没有被关闭。
关闭了回显功能,我们可以用echo on来重新开启回显功能

@echo off
echo hello
echo on
echo world
pause

在这里插入图片描述从上面可以看到第1到第3行都没有回显,从echo on开启后的第4行才恢复了回显。

2.3 如何使用echo来显示on或者off呢?

只需要在echo后面加个英文的小数点"."即可;代码如下

@echo. off
@echo. on
@pause

在这里插入图片描述

3. echo显示中文乱码的解决办法

当我们想显示中文的内容的时候发现显示的内容会出现乱码

@echo 显示中文
@pause

在这里插入图片描述
加入代码chcp 65001

chcp 65001
@echo 显示中文
@pause

在这里插入图片描述
我们成功的将中文显示了出来, 可是pause的那句"请按任意键继续..."却变成了英文,这是因为“中文locale下的ANSI对应的GBK字符集”,即代码页936。cmd.exe在解析批处理命令时是按照默认代码页的编码来解析的。众所周知,所有的文件都是以二进制的形式保存的,但是同样的二进制序列用不同的编码来解析得到的结果是不一样的。 1
比如:

E4 BD A0 E5 A5 BD

如果以UTF-8编码来解析是“你好”,而用GBK来解析是“浣犲ソ”。
chcp来切换代码页,65001代码页对应的是UTF-8编码,所以显示结果正确。
如果加入了chcp 65001后仍然显示为乱码,那么可能是使用了旧版的cmd.exe,在窗口标题处右键并点击属性
在这里插入图片描述
如果当前代码页仍然为963
在这里插入图片描述
只需将将字体改成Lucida Console,点击确定,然后再重新执行即可。

代码页为65001时中文显示才能正常。
在这里插入图片描述

4. echo显示变量内容

set 是设置一个变量的意思
set test=123456是设置一个变量,叫做test,并且赋值为123456
那么要通过echo把变量里面的值显示出来就要用到批处理变量引导符%
这个百分号严格来说是算不上命令的,它只是批处理中的参数而已.
引用变量用%var%,var是指变量的名称

@echo off
set test=123456
echo %test%
pause 

上面的代码执行效果如下:

在这里插入图片描述
那如果要和中文一起显示怎么办呢?
直接加!

@echo off
chcp 65001
set test=123456
echo 变量值为%test%
pause 

这里不需要任何连接符, 或者说%就是连接符,效果如下
在这里插入图片描述

5. 利用echo来写入TXT文件

5.1 > 重定向符

输出重定向命令
这个字符的意思是传递并且 覆盖 ,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台)
在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&,&&,||和语句块的制约限制。2
比如:
使用命令:echo hello >1.txt将建立文件1.txt,内容为”hello “(注意行尾有一空格)

echo hello >1.txt

在这里插入图片描述
使用命令:echo hello>1.txt将建立文件1.txt,内容为”hello“(注意行尾没有空格)

echo hello>1.txt

在这里插入图片描述
注意: 如果要写入的文件不存在则会在当前路径下新建一个文件并写入覆盖, 已存在则直接覆盖内容.
echo命令写入文件可以直接写入中文而不需要用到chcp 65001代码

echo 中文>1.txt

在这里插入图片描述
原因是txt文档本来就是UTF-8编码

5.2 >> 重定向符

输出重定向命令
这个符号的作用和>有点类似,但他们的区别是>>是传递并在文件的 ==末尾追加 == ,而>覆盖

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

在这里插入图片描述

6. echo显示特殊符号

6.1 ^ 转义字符

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

@echo off
echo ^<
echo ^>
echo ^&
echo ^<^>^&
pause

在这里插入图片描述


  1. 参考《批处理用chcp 65001处理Unicode字符》 ↩︎

  2. 参考《批处理常用特殊符号简介》 ↩︎

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐