目录
在windows上编程或者制作一些小工具,少不了使用批处理脚本,而且在各种开发环境搭建中我们经常会看到批处理脚本。批处理脚本以cmd命令为基础,增加一些变量和参数构造多命令来完成复杂的任务。
1、echo
echo就是跟所有语言相似的输出打印命令,一般我们会在前面加上@前缀,表示不会显示打印语句。
C:\Users\buejee\Desktop\battutorial>for %i in (1,3,5) do echo %i
C:\Users\buejee\Desktop\battutorial>echo 1
1
C:\Users\buejee\Desktop\battutorial>echo 3
3
C:\Users\buejee\Desktop\battutorial>echo 5
5
C:\Users\buejee\Desktop\battutorial>for %i in (1,3,5) do @echo %i
1
3
5
我们也会调用@echo off关闭显示打印信息,这样后面的所有echo就不用加@前缀来隐藏命令。
C:\Users\buejee\Desktop\battutorial>type bat_echo.bat
echo hello
@echo off
echo world
C:\Users\buejee\Desktop\battutorial>bat_echo.bat
C:\Users\buejee\Desktop\battutorial>echo hello
hello
world
在这个示例中,第一次没有设置@echo off,运行脚本,回显了echo hello,但是当运行echo world的时候,它没有回显,因为已经关闭了回显。
echo表示输出,那么输入怎么办?这里要借助一个小技巧set /p
@echo off
echo please input you name:
set /p name=
echo your name is : %name%
运行:
echo还可以结合>与>>命令向文件中写入和追加内容。
C:\Users\buejee\Desktop\battutorial>echo hello > hello.txt
C:\Users\buejee\Desktop\battutorial>echo world >> hello.txt
C:\Users\buejee\Desktop\battutorial>type hello.txt
hello
world
C:\Users\buejee\Desktop\battutorial>echo hello,world > hello.txt
C:\Users\buejee\Desktop\battutorial>type hello.txt
hello,world
C:\Users\buejee\Desktop\battutorial>
其实这个示例里面隐含了一个操作,就是如果hello.txt文件不存在就创建,存在就覆盖或者追加。在linux下,我们新建一个文件可以使用touch命令,在windows命令行下,创建文件可以使用echo > xxx.txt 就可以了。
值得一提的是,因为cmd命令行默认编码是ANSI(936),而批处理脚本默认编码是UTF8(65001),所以在bat文件中使用echo输出中文会乱码。解决办法:要么改变cmd编码,要么改变脚本编码为ANSI。
改变脚本编码,可以在notepad++里面直接使用 "编码" 菜单项:转为 ANSI 编码 修改,再一个办法就是通过记事本打开脚本,然后“另存为”的时候选择编码 ANSI,如下所示:
2、注释
任何语言都有注释,批处理脚本语言也不例外,它的注释,就是使用关键字REM,一般带上@前缀。
在这个图中,可以看到,当使用REM关键字的时候,这一行内容就已经变为绿色高亮,明显与可以执行的语句有区别。