bat批量处理脚本介绍、变量、参数、常用命令、命令返回值、应用示例

一、示例引入

在启动wps软件时,每次都必须执行(>前面内容表示DOS提示符):

C:>cd wps
C:WPS>spdos
C:WPS>py
C:WPS>wbx
C:WPS>wps

如果每次用WPS之前都这样执行一遍,其实是很麻烦的。

用批处理,就可以实现将这些麻烦的操作简单化,首先编写一个pichuli.bat批处理文件,内容如下:

@echo off
c:
cdwps
spdos
py
wbx
wps
cd

以后,我们每次进入wps,只需要运行pichuli这个批处理文件即可。

使用BAT(Batch)批处理,是为了减少我们在工作中冗长重复的步骤。

二、bat批量处理介绍

bat (批处理文件类型)批处理文件,在DOS和Windows系统中使用,.bat文件是可执行文件,由一系列命令构成,其中可以包含对其他程序的调用。

这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。


批处理(Batch),也称为批处理脚本。批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 或cmd。

目前比较常见的批处理包含两类:DOS批处理和PS批处理。


PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。

更复杂的情况,需要使用if、for、goto等命令控制程式的运行过程,如同C、Basic等高级语言一样。如果需要实现更复杂的应用,利用外部程式是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。

批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何当前系统下可运行的程序都可以放在批处理文件中运行。


三、关于变量

1、变量的类型

批处理中的变量基本上是万能的,可以储存各种各样的数据,不过用来计算时会发现变量类型转为了int,数值的极端范围为 [-2147483648,2147483647]。


2、变量的命名

批处理的变量命名没有什么限制,不过建议命名还是遵守标准的命名方法,不然像这样的代码是很麻烦的。

@Echo Off
Set IF=Set
%IF% lF=Goto
:IF
IF %IF%==IF %lF% IF

正是因为变量的名称是可以*调配的:数字、字母、甚至汉字都可以变成变量名样。


3、变量的扩展(使用变量)

扩展,可以理解为显示出这个的值,如果想要使用这个变量的值一般情况下都要扩展

扩展方式:%变量%或!变量!


其中!变量!是延迟扩展,需要加上SetLocal EnableDelayedExpansion语句才能够实现,延迟扩展对于新手来说是一个很难理解的东西,就这么说吧,当变量在一个语句的内部受到了改变,而在这个改变之后又要输出,那么必须要延迟扩展,这个牵扯到了奇奇怪怪的预处理机制,不详解了。

用连接符号连起来的语句,if,for和它们后面括号内的内容都是属于一个语句

例1:

@echo off
set num=10
set num=100 & echo %num%
echo %num%
echo 虽然已经将num的值更改为100,但由于没有延迟扩展,所以值仍为10,不过在下一个语句num的值就改变了
pause>nul


例2:

@echo off
SetLocal EnableDelayedExpansion
set num=10
set num=100&echo !num!
echo 现在两个num的值一样了
echo %num%
pause>nul

变量在扩展过程中还可以做一点手脚

例3:

set str=1234567890
echo %str:~0,5%
echo %str:~1,5%
echo %str:~-5%
echo %str:~5,-2%
echo %str:7890=54321%
pause>nul

这就是对字符串的处理,这个是批处理的特性,叫“变量延迟”


四、关于参数

参数在批处理的表达是%0,%1,%2....%9 ,以及全部参数%*(不包括%0)

%0的初始量是批处理本身路径,类似%~f0

一般只能取前九个参数,除非使用%*

shift命令允许获取后面的参数

格式:shift [/n]

n为1~8的数

shift 会使%0变成%1,%1变成%2……%9变成原来的第10个参数(不推荐)

一般使用shift /1,将会从%1开始替换,保留原%0

注意:call标签时参数也是可用的,而且当返回时参数将变回原来的

例子:

@echo off
call :标签 arg1 arg2
echo %1
::会显示回显已打开
echo %2
exit
:标签
echo %1
::这时会显示arg1
echo %2
::这时会显示arg2
exit /b