写在前面:
提起批处理,或者 .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 繁体中文
65001 UTF-8
936 简体中文默认的GBK
437 MS-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 只能进行传参,但是不能返回参数或者变量

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

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

  1. Windows下Java调用BAT批处理不弹出cmd窗口

    常规Windows下Java调用BAT方式肯定会弹出cmd窗口 Runtime.getRuntime().exec("cmd.exe /C start D:\\test.bat") ...

  2. Windows下Latex的系统路径增添,使用命令编译

    Windows下Latex的系统路径增添,使用命令编译 1.修改Windows系统环境路径 2.使用命令行工具编译.tex文件 1.修改Windows系统环境路径 本人Windows系统中安装了Mik ...

  3. Windows下nginx的启动,重启,停止命令

    Windows下nginx的启动,重启,停止命令 打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可(启动nginx) nginx -s ...

  4. Windows系统CMD命令提示符的常用命令汇总

    1.1概述 本期Windows系统CMD命令提示符的常用命令汇总向各位小伙伴总结分享打开任务管理器.打开系统配置和打开事件查看器等相关操作命令. 操作命令及相关截图 打开系统配置操作命令:msconf ...

  5. 【网络通信 -- 直播】FFMPEG 简介与常用命令总结

    [网络通信 -- 直播]FFMPEG 简介与常用命令总结 [1]FFMPEG 简介 FFmpeg,项目的名称来自 MPEG 视频编码标准,"FF"代表"Fast Forw ...

  6. cmd cd命令_Windows系统CMD命令提示符的常用命令汇总

    一.概述 本期文章分享Window 系统CMD命令提示符的常用命令汇总,结合具体的使用场景,向各位小伙伴分享关于Window操作系统系统管理.磁盘管理.文件管理.进程任务管理.网络管理和常用工具等命令 ...

  7. Vagrant 简介与常用命令

    文章目录 Vagrant 简介及常用命令 一.Vagrant 概念 二.常用命令 三.Vagrantfile 基本配置 四.使用 Xshell 连接虚拟机 Vagrant 简介及常用命令 一.Vagr ...

  8. 橙子04-HDFS简介及常用命令

    HDFS简介及常用命令 HDFS简介 HDFS相关概念 HDFS准备工作及常用命令 准备工作 文件上传命令 文件查看命令 文件合并命令 文件下载命令 文件删除命令 相关视频内容可在B站观看 HDFS简 ...

  9. Windows之Chocolatey:windows下的apt-get即Chocolatey简介、安装、使用方法之详细攻略

    Chocolatey简介 Chocolatey 是 windows 下一款命令行包管理软件 ,简单说这就是 Windows 的 apt-get.习惯 Linux 操作方式并非常想用它操纵 Window ...

最新文章

  1. 2022年人工智能全球最具影响力学者榜单AI 2000
  2. python await原理_JavaScript async/await原理及实例解析
  3. 亚信第一天 5-15
  4. 【C语言及程序设计】项目1-24-4:个人所得税计算器if语句版
  5. 【转】Linux的僵尸进程解决攻略
  6. 【CF Round #534 Div2】B:Game with string(水题,积累思路)
  7. 在IDEA上配置SonarLint以及代码质量分析报告模板
  8. Android简历附件2
  9. 微积分memo——一元函数积分学
  10. 7-161 双曲余弦函数(*)
  11. 台式机装苹果系统_台式机能装苹果系统? 能!
  12. 为什么公司要和商标同步注册?
  13. java.sql.SQLException: No database selected
  14. R语言使用t.test函数执行t检验获取总体平均值的置信区间(默认输出结果包括95%置信水平的置信区间)
  15. 修改java游戏分辨率怎么调_怎么修改jar游戏的分辨率
  16. oracle SDO_ORDINATE_ARRAY直接展示
  17. iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
  18. MQTT C Client实现消息推送(入门指南)
  19. OKRs,自由之风劲吹,发挥无限创造力 | Chatopera
  20. “景驰科技杯”2018年华南理工大学程序设计竞赛 C Youhane's Undergraduate Thesis (大模拟)

热门文章

  1. 《neural networks and deep learning》读书笔记
  2. python:将遥感数据使用matplotlib库绘制成图片
  3. Hello World的由来
  4. 图数据库 OrientDB 安装 及 初步使用
  5. php论坛的主帖表设计,小蜜蜂论坛回帖机推出phpwind论坛回帖机
  6. 点石互动--石头之:SEO是狗屎还是科学?
  7. 试题 算法训练 A的B的C次方次方
  8. OpenWRT NAT配置
  9. 深度剖析offsetParent、offsetTop、offsetLeft和ParentNode的区别
  10. el-table中label换行,以及表头表格内容换行