900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Windows下的批处理文件.bat/.cmd简介及常用命令

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

时间:2024-03-27 00:16:30

相关推荐

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 解决编码问题

只需要在notepad++将其转为ANSI编码即可

或者在使用文本文档保存时选择编码为ANSI即可:

可以看到已经显示正常了,至于为什么要设置为ANSI编码格式,可以看看我们DOS窗口其原本的编码格式:

打开DOS窗口快捷键:Windows + R

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

可以看到这个DOS窗口的编码格式是ANSI

这里的 936 是微软为中国区设置的编码格式,当然,我们也可以对编码格式进行修改

修改命令如下:

chcp 编码格式代码

常见编码格式代码

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

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

可以看到两者的运行效果是一样的,不过大家要注意路径的问题

例如:批处理文件在D盘,而DOS窗口的当前路径是在C盘下,那这样会存在找不到文件的情况 因此大家可以写上批处理文件的完整路径,不过感觉这样好麻烦,还不如我咔咔双击一下呢。

二、常见的批处理命令

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

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

echo [message]

示例:

echo helloworld ::打印helloworld

效果:

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

示例:

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

运行效果:

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

运行效果:

可以看到on / off 这个参数就是是否显示 DOS命令的一个作用。

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

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

示例:

@echo offecho helloworldrem 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 helloworldpause

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 offif exist second.bat (second.bat) else (echo "the file not exist")::当存在second.bat 时就执行这个批处理文件 否则打印"the file not exist"pause

文件不存在时:

当文件存在时:

second.bat :

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

运行结果:

2.7 call调用另一个批处理文件或可执行程序,并不终止原来的文件,虽然说不使用call 也可以调用别的批处理文件,但是这样调用的批处理文件执行结束后不会回到原来的批处理文件

注意:不要调用自身可能会陷入死循环。

示例:

fisrt.bat :

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

second.bat :

@echo offecho "I am second.bat"pause

运行结果:

2.8 goto label:跳转到指定标签行,然后从": label" 的下一行开始处理命令 ,goto 语句经常和 if 连起来用

label 的名字可以随意取,goto 是根据 " : " 找到该标签的,不要忘记了 冒号。

示例:

@echo offif exist second.bat (goto case1):case2echo i am case2:case1echo i am case1call second.batpause

运行结果:

2.9 start:调用外部程序

例如我这里写了一个 VBS 程序

打开它.vbs :

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

批处理文件:

first.bat

@echo offstart 打开它.vbspause

运行结果:

选择是:

选择否:

这样的功能 call 命令也可以做到,但是这两者又有什么不同呢?

1.call 命令主要来进行批处理的内部调用,当然也可以调用可执行程序,而start 不能进行内部调用,但是其可以执行几乎所有的外部程序。

2.call 是在当前窗体进行调用一个子进程,变量可以互通,但是start 调用外部程序是相当于是新开一个进程。

3.call 可以将参数传入子进程,子进程也可以将值返回,但是start 只能进行传参,但是不能返回参数或者变量

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。