Windows下的批处理文件.bat/.cmd简介及常用命令

写在前面:
提起批处理,或者 .bat/.cmd 为后缀名的文件,大家可能都见过,也许会比较陌生,这并不是一种新的编程语言或者一种很前沿的技术,在早期的windows系统下的计算机,其实只有一个黑框框 — DOS窗口,就像下面的一样,当时还没有鼠标。所以只能用键盘来进行输入,就是在这个DOS窗口输入命令,来与计算机进行交互。
在这里插入图片描述

批处理文件简介:

1.所谓的处理文件其实就是以.bat/.cmd为后缀的文本文件,是可以拿文本编辑器进行打开的,这个文件的每一行都是一条DOS命令,因此其可以依次处理多条DOS命令,其效果和在DOS下依次执行各条命令相同发,这也是其名字批处理的由来。批处理文件一般使用文本编辑工具就可以编写。
2.处理文件可以双击执行也可以在DOS窗口下输入批处理文件的名称,其本质还是系统调用Cmd.exe来运行该文件。
3.批处理文件是一种简单的程序,并没有很严格的编程规范。
4. .cmd文件可以使用的命令比.bat多,但是.cmd文件只可以在windows2000以后使用。
5.批处理文件是不区分大小写命令的,shell脚本则不然。
6.批处理文件可以放在任意的路径下运行。

一、写出第一个属于自己的批处理文件

1.1 新建一个文本文档

在这里插入图片描述

1.2 编辑并保存

在这里插入图片描述

1.3 修改文件后缀名为.bat/.cmd (当然先修改文件名再编辑也是可以的,并无先后顺序之分)

在这里插入图片描述

1.4 双击运行(或者在命令窗口输入文件名运行)
1.4.1 双击运行效果:

在这里插入图片描述
可以看到,咱们的 helloworld 也是成功的打印出来了,当然咱们也翻车了,不要慌,咱们看看这种问题怎么解决

1.4.2 解决编码问题
  1. 只需要在notepad++将其转为ANSI编码即可
    在这里插入图片描述

  2. 或者在使用文本文档保存时选择编码为ANSI即可:
    在这里插入图片描述
    在这里插入图片描述
    可以看到已经显示正常了,至于为什么要设置为ANSI编码格式,可以看看我们DOS窗口其原本的编码格式:
    打开DOS窗口快捷键:Windows + R
    在这里插入图片描述
    在这里插入图片描述

每天学会一个小技巧:当你想复制这个DOS窗口里的内容,却发现 CTRL + C 窗口就退出关闭了,这时候可以在空白处 :全选 --> 右键 – > 编辑 --> 复制
在这里插入图片描述

在这里插入图片描述
可以看到这个DOS窗口的编码格式是ANSI
这里的 936 是微软为中国区设置的编码格式,当然,我们也可以对编码格式进行修改
修改命令如下:

chcp 编码格式代码

常见编码格式代码

代码编码格式
950繁体中文
65001UTF-8
936简体中文默认的GBK
437MS-DOS 美国英语
1253希腊语
1258越南语
1256阿拉伯语

注意:这种只是临时的进行修改当前文件的编码格式,当这个DOS窗口关闭后又将恢复到原来的编码格式。

1.4.3 DOS窗口下输入 批处理文件名 运行效果

在这里插入图片描述
可以看到两者的运行效果是一样的,不过大家要注意路径的问题
例如:批处理文件在D盘,而DOS窗口的当前路径是在C盘下,那这样会存在找不到文件的情况 因此大家可以写上批处理文件的完整路径,不过感觉这样好麻烦,还不如我咔咔双击一下呢。

二、常见的批处理命令

2.1 echo 显示消息;打开回显或者关闭回显功能

一般用于打印一些日志或说明,将结果或者批处理过程中的异常或者错误打印出来便于分析
echo [message]
示例:

echo helloworld  
::打印helloworld

效果:
在这里插入图片描述

echo [on/off] 打开或关闭回显功能
示例:

echo off
echo helloworld
rem echo [message] 在DOS窗口打印message 就像我们C++ 里的 cout<<"helloworld"<<endl;
rem rem 这个命令是注释的意思,方便DOS命令的可读性,当然也可以用"::" 来替代
::第一个例子肯定是helloworld啦!
pause
::pause 命令是为了让那个DOS黑框框可以停下来,不然他一闪而过,啥也看不清

运行效果:
在这里插入图片描述

echo on
echo helloworld
rem echo [message] 在DOS窗口打印message 就像我们C++ 里的 cout<<"helloworld"<<endl;
rem rem 这个命令是注释的意思,方便DOS命令的可读性,当然也可以用"::" 来替代
::第一个例子肯定是helloworld啦!
pause
::pause 命令是为了让那个DOS黑框框可以停下来,不然他一闪而过,啥也看不清

运行效果:
在这里插入图片描述
可以看到on / off 这个参数就是是否显示 DOS命令的一个作用。

2.2 @ 表示不显示后面的命令

@ 与 echo off 相似,但是其只能不显示后面的这一行命令,作用域之后这一行
示例:

@echo off
echo helloworld
rem echo [message] 在DOS窗口打印message 就像我们C++ 里的 cout<<"helloworld"<<endl;
rem rem 这个命令是注释的意思,方便DOS命令的可读性,当然也可以用"::" 来替代
::第一个例子肯定是helloworld啦!
pause
::pause 命令是为了让那个DOS黑框框可以停下来,不然他一闪而过,啥也看不清

运行结果:
在这里插入图片描述

2.3 rem 相当于注释作用

也可以使用 " :: " 双冒号,表示注释,同样作用域也只是这一行,同理这一样是不被执行的,和代码规范一样,加上合理的注释可以让你的代码或者语句更加的有可读性。
示例:

rem echo [message] 在DOS窗口打印message 就像我们C++ 里的 cout<<"helloworld"<<endl;
rem rem 这个命令是注释的意思,方便DOS命令的可读性,当然也可以用"::" 来替代
2.4 pause 暂停

有时候我们需要看到批处理文件的一些信息,但是打印出来之后机会一闪而过,什么也看不到,因此可以在需要暂停的地方使用 pause 命令,使其停下来。停下来之后按任意键就可以继续执行。
示例:

@echo helloworld
pause
2.5 ren 重命名文件
ren first.txt first.bat  ::将first文件重命名为first.bat
2.6 if 判断

和咱们的编程语言,用于判断条件是否成立,成立则执行相应的程序
除了 常见的
2.6.1 if else

if 条件(成立时执行的命令) else (不成立时执行的命令)
::执行的语句建议都写在 "()" 里。 

注:如果else 要换行需要在 if 语句的末尾使用 " ^ " 符号将语句进行连接,否则会报错
例如:

if 条件一 (执行的语句)^
else (执行的语句)

2.6.2 if [ not] exist XXX 表示 如果存在XXX的意思 一般用来判断文件是否存在
例如:
first.bat :

@echo off
if exist second.bat (second.bat) else (echo "the file not exist")
::当存在second.bat 时就执行这个批处理文件 否则打印"the file not exist"
pause

文件不存在时:
在这里插入图片描述
当文件存在时:
second.bat :

@echo off
echo "I am second.bat"
pause

在这里插入图片描述
注:这里如果两个文件在相同目录下不用写路径,但是如果不在同一目录下,需要写上文件的绝对路径,否则会出现错误。

2.6.3 if not exist 如果不存在 …
DOS命令里并没有 != 这种写法,但是提供了 not 关键词,也是条件取反的意思。

2.6.4 if errorlevel number 如果返回数字为 number …
一般DOS程序会在执行结束后返回一个数字来代表程序运行的结果,称为错误码 errorlevel 或者返回码,有点返回值那味了是不
常见的返回码为 : 0 1。这样就可以根据返回值来进行判断下一步要执行的指令了。

示例:

@echo off
xcopy second.bat D:
::xcopy [xxx路径下的文件] [拷贝的目标目录]
::call [文件路径] [filename] 调用另一个批处理文件,但是当前的怕批处理文件并不会结束
if errorlevel 1 (echo 拷贝失败) else if errorlevel 0 (echo 拷贝成功)
pause

运行结果:
在这里插入图片描述
2.7 call 调用另一个批处理文件或可执行程序,并不终止原来的文件,虽然说不使用call 也可以调用别的批处理文件,但是这样调用的批处理文件执行结束后不会回到原来的批处理文件
注意:不要调用自身可能会陷入死循环。
示例:
fisrt.bat :

@echo off
if exist second.bat (call second.bat)^
else echo 文件不存在
::call [文件路径] [filename] [parameters]调用另一个批处理文件,但是当前的怕批处理文件并不会结束
::并且在调用批处理文件时可以传入参数
echo second.bat 已经执行完毕
pause

second.bat :

@echo off
echo "I am second.bat"
pause

运行结果:
在这里插入图片描述
2.8 goto label: 跳转到指定标签行,然后从" : label " 的下一行开始处理命令 ,goto 语句经常和 if 连起来用
label 的名字可以随意取,goto 是根据 " : " 找到该标签的,不要忘记了 冒号。
示例:

@echo off
if exist second.bat (goto case1)
:case2
echo i am case2
:case1
echo i am case1
call second.bat
pause

运行结果:
在这里插入图片描述
2.9 start: 调用外部程序
例如我这里写了一个 VBS 程序
打开它.vbs :

con =MsgBox ("你说打工人是不是人上人?",vbYesNo + vbInformation)
if con  = vbyes then
msgbox "人上人YYDS"
end if
if con=vbNo then
msgbox "不是也得是!"
end if

批处理文件:
first.bat

@echo off
start 打开它.vbs
pause

运行结果:
在这里插入图片描述
选择是:
在这里插入图片描述
选择否:
在这里插入图片描述
这样的功能 call 命令也可以做到,但是这两者又有什么不同呢?

1.call 命令主要来进行批处理的内部调用,当然也可以调用可执行程序,而start 不能进行内部调用,但是其可以执行几乎所有的外部程序。
2.call 是在当前窗体进行调用一个子进程,变量可以互通,但是start 调用外部程序是相当于是新开一个进程。
3.call 可以将参数传入子进程,子进程也可以将值返回,但是start 只能进行传参,但是不能返回参数或者变量

批处理相关的命令秩序更新中…

  • 7
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值