前几天大家推荐了一篇小伙伴投稿的文章《讲真,这玩意你真的会用吗?》,讲了一些DOS基础知识,反响还不错,有不少小伙伴挺感兴趣的,要求今后多推这样的文章,所以今天再邀请这位小伙伴给大家介绍一下面向小白的批处理制作教程。
—— 网黑哥
长文章警告,建议边看边做。
根据小伙伴们的留言,现推出批处理制作教程。
注意:这篇文章的后半段不太好理解,需要反复自己尝试。只可意会不可言传。
批处理是什么呢?举个上次的例子,我想把 E 盘 A 文件夹下的所有 TXT 文本删除掉,首先我们要把盘符切换为 E,其次再利用 cd 命令进入 A 文件夹,再利用 del 命令和通配符将 A 文件夹下的所有 TXT 文本删除掉。
假如我们经常重复同样的操作,是不是很麻烦。这时,批处理文件就派上用场了。我们只需提前将我们要执行的命令输入到记事本中,生成一个批处理文件。下次再执行时只需打开批处理文件就可以自动执行这些命令了。
如果要实现以上操作就要这样做:
新建一个文本文档打开,将我们要执行的命令输入进去。注意每一行一个命令,不可重叠。
保存我们的文字,并将文本文档的文件后缀 TXT 改为 BAT 或者 CMD。
到此我们就完成了一个简单的批处理文件的制作,像这样。
假设你将批处理文件放在了 E 盘的 A 文件夹下,那么就不用执行路径的操作了,因为批处理文件放在哪个地方它就对哪个目录进行操作。
这就是批处理的制作,每一行一个命令,命令按从上到下的顺序依次执行。(这个很重要)其次,我们不需要像 VScode 或者 Atom 这样的代码编辑器,只需新建一个 txt 文档即可。当然也推荐使用第三方的文本编辑器,因为这些编辑器在你编写命令的时候会自动提示命令,节省时间。
再来啰嗦一下顺序的问题,批处理文件执行的顺序是从上到下依次进行,所以在设计自己的批处理文件时,要想好在执行某个命令之前还需要执行哪些操作。
比如上面的例子,在执行 del 命令之前,要先用 cd 命令将路径调到批处理文件所在的目录,再执行 del 命令将批处理文件所在目录下的 txt 文件全部删除。当然也不能顾前不顾后,看情况而定。
我们也可以用批处理实现微信多开,这个网黑哥之前讲过,在这里重新说一下。
微信任意多开
首先我们得知道我们的微信装在什么地方,首先对着微信的快捷图标右键-属性。
我们可以看到目标和起始位置。目标就是微信程序 Wechat.exe 所在的绝对路径 + 文件名,而起始位置就是微信程序 Wechat.exe 所在的绝对路径。我们只需要做一个启动 Wechat.exe 的批处理就好了。
这里介绍一个命令:start
我们在 CMD 中输入 start /? 就可以看到 start 命令的用法(由于用法介绍过长,这里就不截图了)start 就是开始的意思,我们可以看到 start 可以启动应用,目录,甚至可以设置最大最小化。这里我们只用 start 的基本用法就行了就行了。
首先补充一下上节课路径切换的知识:
/D
上节课介绍 cd 命令切换路径,可是盘符切换是一大难题。今天,他来了。/D 命令意思是加文件路径。这里就可以直接使用绝对路径了。比如进入 E 盘的 A 文件夹。我们只需要输入以下命令。
cd /d E:\A
这里还得说一下路径的问题,比如我们要进入 C:\Program Files (x86) 可以看到路径里面存在空格。执行会出现如下情况:
那怎么解决呢?
我们只需要在路径两边加上引号就可以了。
最后的代码如下:
cd /d "C:\Program Files"
在 start 命令中 /d 同样适用。毕竟我们得告诉可执行文件在哪里。还拿微信举例子。
首先我们输入 start /d,再在后面加上微信的起始位置,由于路径中带空格,我们需要加引号。最后加上可执行文件名称:WeChat.exe。
最后代码如下:
start /d "C:\Program Files (x86)\Tencent\WeChat\" WeChat.exe
可是我们要多开,比如我们要开两个,我们在下一行再次输入相同内容即可。
如果想要任意多开,那就多复制几行命令即可。
多学一点
简单的介绍完了,下面介绍一些进阶的东西。
这是我之前制作的一个批处理文件,动用了多个外部程序来实现下载视频的功能,我们可以看到屏幕上显示了所有视频下载引擎的名称,编号,适合的下载网址等。以及让用户输入想要选择哪个下载引擎的输入框(其实不是框,暂且这么叫。)
那么这是怎么实现的呢,下面我将为大家一一讲解。
首先当然是给大家介绍一下批处理所用到的一些指令。
ECHO
echo 翻译过来就是回声的意思在 DOS 中 echo 起到回显的作用。比如上面的例子在执行时是这样的。
可以看到在运行的同时,命令自身显示了出来。个人用还好,但是如果你这个批处理文件是给客户制作的,是不是不太美观。所以我们可以把它关掉。
echo on 是打开回显,echo off 则是关闭回显。(不懂得把英汉词典拿出来)
我们需要在批处理文件的开头插入这段命令。
之后执行就看不到命令的显示了。
但可以看到 echo off 这个命令还是被显示出来了。因为是 echo off 之后的命令才被关闭了回显。这时@就派上用场了。@的作用是关闭这一行命令的回显。所以,我们只需要在 echo off 的前面加一个@就行了。(不用加空格!!!!)
之后再运行就看不到了
当然,echo 的作用不止这一个,echo 还可以显示文字。(和 echo off 无关)比如我想在批处理文件中显示“网罗灯下黑”这一段文字,我们只需要输入 echo 网罗灯下黑就可以了。
执行一下。
提示,部分朋友运行可能会出现如下情况。
可以看到中文乱码了,(这种情况常出现在用第三方编辑器编辑的批处理文件)所以这是编码问题。这是一个玄学问题。。。。
这里说一下编码问题。TXT 文档的默认编码模式为 ANSI。我们的计算机有多种语言版本。比如英文版。简体中文版等。就拿中文版来说,我们的计算机默认的编码是支持简体中文的,这就是为什么我们用 ANSI 编码不会乱码。
而如果你把这个批处理文件拿到英文版操作系统上去运行,他就乱码了。由此说明,ANSI 并不是特定字符编码,他会随着操作系统的改变而改变。(ANSI 编码只存在于 Windows 系统)
那这怎么办呢?当然是改变编码咯。这里就要介绍一个新命令了。
CHCP
我们再 CMD 中输入 CHCP /? 就可以看到 CHCP 的作用。
单独输入 CHCP 就可以显示当前 CMD 使用的编码。比如我的就是 936(简体中文)。
虽然在自己的电脑上没问题,但在别的电脑上就不一定了。
那我们怎么修改呢?只需输入如下命令:
chcp+ 编码代号
比如,chcp 936 就将当前的编码切换到简体中文了。
顺便写几个编码号:
65001 UTF-8 代码页
950 繁体中文
936 简体中文默认的 GBK
437 MS-DOS 美国英语
这时再打开就显示正常了。
这里再插一嘴,很多朋友会发现程序执行完就关掉了,这时只需在程序末尾插入 pause(暂停)就可以出现按任意键继续的显示了。
然后再说一下文字排版问题,就像上面的图片一样,我给文字加了个边框。但其实就是 echo 后面加了一堆等于号和加号。部分同学用第三方编辑器做出来后发现文字错位的情况。解决方法也很简单,空格。差多少补多少。
还有的同学觉得自己写的文字太紧凑就 echo 后面什么也不加空了一行。结果显示。
所以 echo 后面必须加东西,如果真想隔一行就拿点代替。如:
echo.SET IF GOTO :%
这五个命令必须连着一起讲。如果你是高中毕业生,数学中有一单元讲的是程序框图,如果你那里学的好那么这对你不叫事。
举个例子,你是一位老师,你班里面有 AB 两个学生,你判两份试卷,A 得了 99 分,B 得了 88 分,而这次考试决定分班,考 99 分的 A 分到了 1 班,考 88 分的 B 分到了 2 班。这就是这几个命令的意思下面我详细讲一下。
首先 set 是设置的意思,有两种主流用法,一个是 /A 另一个为 /P。这里只讲解 /P 的作用。根据个人理解,/P 就是设置变量的作用。
假设我们设置一个变量,并让用户为其赋值。做法如下:
set /p 变量名称 = 提示用户内容
(这里用一个等号,等号后面是提示用户的内容,直接显示在 CMD 中,之前的不显示)
就像 A 同学想知道自己分到哪个班一样,查询系统提示要 A 输入自己的分数。小明输入 99 就等于为分数这个变量赋值为 99。
比如我将分数变量的名称设置为 fs,在界面提示用户输入自己的分数。
set /p fs= 请输入您的分数
用户可以输入任何值,如 1 2 3 4 5 a b c 。。。。
其次就是 if ,goto 和: 这三个命令了
if 我们可以理解为如果,goto 可以理解为则。而 : 我们可以理解为一个标签。而 % 变量 % 用来表示变量。(前面是设置变量)
比如校方想要考 99 分的同学进到 1 班
if %fs%==99 goto 1(这里用两个等号)
变量还可以在进行利用
比如如下效果
set /p fs= 请输入分数
if %fs%==99 goto 1
:1
echo 恭喜你考了 %fs% 分,被分到 1 班
pause
再然后就是标签的设置了,其实很简单。比如 A 输入 99 后,程序需要告诉用户你被分配到了 A 班。上面的 goto 1 中的 1 只是标签的名称真正的标签写法为
:标签名称
比如上面的 goto 1 就是转到名为 1 的标签并执行 1 标签的内容。
那么这个标签应该这样写:
:1
echo 恭喜你被分配到 1 班。
我知道很多小伙伴看到这里很迷茫,下面我就做一个实例来让大家理解。
假设我想做一个程序,名为文件删除器。可以批量删除 TXT 文件或者 DOC 文件。
首先我们把配置得弄好。首先将批处理编码锁定,其次关闭回显,然后做一个像样子的界面。
我是这样做的。
首先我将批处理的文字编码锁定在了 936(简体中文)然后我关闭了回显。其次我拿字符和文字简易的做了一个界面,让用户知道这个批处理文件是干嘛的。以及使用的注意事项。
执行起来是这样子的。
可以看到文字错位了,这时候我们就要用到空格大法了,缺多少,补多少。
效果如下:
看起来好多了,然后我们就要到了让用户选择的时候了。这时就得设置变量条件语句和标签了。
首先我们得让用户知道,输入什么值会获得什么功能。然后再让他们输入。
我是这么做的:
可以看到我先用 echo 命令告诉了用户你输入什么值会获得什么功能,其次我设置了一个名为 A 的变量。
执行起来是这样子的:
其次就是设置条件语句和标签了。
首先我得想一下给这两个标签起一个什么名字,干脆就叫 txt 和 doc 吧。
我是这样做的。
首先如果用户给 A 变量赋值为 1,则转到 txt 标签,并执行 txt 标签下的内容。
如果用户给 A 变量赋值为 2,则转到 doc 标签,并执行 doc 标签下的内容。
当然,这里还可以输入 345 等任何字符,可条件语句中没有设置,这时会出现错误。批处理会自动执行条件语句下面的第一个命令。为了以防万一,我们可以将设置变量的变为一个标签,名为 B。这样当用户输入错误时可以回到变量设置。
具体做法请看下图:
好了,其实这一部分的知识并不太好讲。因为变动性很大,只能作为参考,真正的批处理制作还得多靠自己的探索。如果大家有什么疑问可以在评论区提问,我会集中回答。
关于批处理命令,虽然说现在用的比较少,不过只要你玩电脑,这个迟早都会接触到,了解一些批处理的相关知识,起码可以看懂这些命令。
这篇文章,投稿的小伙伴花了不少心思来写,完成度很高,有讲解,有实操,而且很容易懂,对这个感兴趣的同学建议收藏后慢慢细看。
本文首发于微信公众号网罗灯下黑(wldxh8),未经授权请勿转载,获取本文介绍的工具请参看个人签名。