1. 显示、设置或删除变量:Set命令
显示变量:set 或 set s 前者显示批处理当前已定义的所有变量及其值,后者显示所有以s开头的变量及值。
设置变量:set aa=abcd 此句命令便可向变量aa赋值abcd。如果变量aa已被定义,则aa的值被修改为abcd;若aa尚未定义,则此句命令即可定义新的变量aa,同时为变量aa赋予初始值abcd。
删除变量:set aa= 此句命令即可删除变量aa。若变量aa已被定义,则删除变量aa;若aa尚未定义,则此句命令为实质意义。
需要说明的是,批处理中的变量是不区分类型的,不需要像C语言中的变量那样还要区分int、float、char等。比如执行set aa=345后,变量aa的值既可以被视为数字345,也可以被视为字符串345。
set命令具有扩展功能,如用作交互输入、字符串处理、数值计算等,属于高级命令范畴。
set #显示目前所有可用的变量,包括系统变量和自定义的变量
set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1
set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3set /a p=p/10 #用 /a
set p= #取消p变量
set /p p=请输入 ::此时屏幕上显示"请输入",并会将输入的字符串赋值给变量p注意这条可以用来取代 choice 命令
有几个动态变量,运行 set 看不到
%CD% #代表当前目录的字符串
%DATE% #当前日期
%TIME% #当前时间
%RANDOM% #随机整数,介于0~32767
%ERRORLEVEL% #当前ERRORLEVEL 值
%CMDEXTVERSION% #当前命令处理器扩展名版本号
%CMDCMDLINE% #调用命令处理器的原始命令行可以用echo命令查看每个变量值,如 echo %time%注意 %time% 精确到毫秒,在批处理需要延时处理时可以用到
批处理数值计算需要使用set命令,具体格式为"set /a expression"。其中,expression代表计算表达式,计算表达式跟C语言里面的表达式基本上完全一致。set支持的运算符也跟C语言里面的一样,只是没有了増一减一。set支持的运算符及优先级排序如下:
() - 分组
! ~ - - 一元运算符(逻辑非、按位非、取负)
* / % - 算数运算符(乘、除得商、除得余数,即取余)
+ - - 算数运算符(加、减)
<< >> - 逻辑移位(左移一位、右移一位)
& - 按位"与"
^ - 按位"异"
| - 按位"或"
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符(set可一次处理多个表达式)
批处理中取变量的值是需要用%或者!的,而在set /a 中,直接用变量名称即可取得变量的值。另外,set支持八进制(数字前缀0)、十进制(数字无前缀)和十六进制(数字前缀0x),且支持不同进制之间的计算,如set /a a=123+0123+0x123,计算及显示结果为十进制。
set常用法总结:
设置变量: set a=1
变量需要运算则需要用set /a 如: set /a num+=1
让用户输入一行变量:set /p
2. tasklist----------查找当前系统进程(包含pid)
3. 结束进程tskill、taskkill(比tskill高级)
taskkill /参数 进程名或进程的pid ------------- 终止一个或多个任务和进程。
参数说明:/pid 要终止进程的pid,可用tasklist命令获得各进程的pid,/IM 要终止的进程的进程名,/F 强制终止进程,/T 终止指定的进程及他所启动的子进程。 例:taskkill /pid 2330 /f
4.批处理修改注册表
1)、reg add:将新的子项或项添加到注册表中。
语法: reg add KeyName [/v EntryName|/ve] [/t DataType] [/s separator] [/d value] [/f]
参数: KeyName指 定子项的完全路径。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。
/v EntryName 指定要添加到指定子项下的项名称。
/ve 指定添加到注册表中的项为空值。
/t DataType 指定项值的数据类型。DataType 默认为REG_SZ 字符串型。
/s separator 指定用于分隔多个数据实例的字符。当 REG_MULTI_SZ 指定为数据类型且需要列出多个项时,请使用该参数。如果没有指定,将使用默认分隔符为 \。
/d value 指定新注册表项的值。
/f 不用询问信息而直接添加子项或项。
reg add 操作的返回值. 0 成功1 失败
reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment" /v "path" /d "C:\Program Files\Java\jdk1.6.0\bin;C:\Program Files\Java\jdk1.6.0;%path%" /f
2)、reg compare:比较指定的注册表子项或项。
语法: reg compare KeyName1 KeyName2 [/v EntryName | /ve] {[/oa]|[/od]|[/os]|[on]} [/s]
3)、reg copy:将一个注册表项复制到本地或远程计算机的指定位置。
语法: reg copy KeyName1 KeyName2 [/s] [/f]
4)、reg delete:从注册表删除项或子项
语法: reg delete KeyName [{/v EntryName|/ve|/va}] [/f]
5)、reg export :将指定子项、项和值的副本创建到文件中,以便将其传输到其它服务器。
reg export KeyName FileName
参数:KeyName 指定子项的完全路径。Export 操作仅可在本地计算机上工作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。
FileName 指定要导出文件的名称和路径。该文件必须具有 .reg 扩展名。
reg export 操作的返回值0 成功 ;1 失败 。
reg export "hkcu\software\microsoft\winmine" c:\data\regbackups\wmbkup.reg
6)、reg import:将包含导出的注册表子项、项和值的文件复制到本地计算机的注册表中。
reg import FileName
7)、reg load:将保存的子项和项写回到注册表的不同子项中。其目的是保存到一个临时文件中,而该文件可用于注册表项的疑难解答或编辑注册表项。
语法 :reg load KeyName FileName
8)、reg query:返回注册表的子项下的项和下一层子项的列表。
语法:reg query KeyName [{/v EntryName|/ve}] [/s]
9)、reg restore :将保存的子项和项写回到注册表。
语法: reg restore KeyName FileName
说明:该操作用于覆盖已编辑的注册表项。编辑注册表项之前,请使用 reg save 操作保存父亲子项。如果编辑失败,则可以使用本操作恢复子项。
10)、reg save将指定的子项、项和注册表值的副本保存到指定文件中。
语法:reg save KeyName FileName
11)、reg unload:使用 reg load 操作删除已加载的部分注册表。
语法: reg unload KeyName
有些注册表键值修改后需要重启资源管理器生效,可以这样实现:
taskkill /f /im explorer.exe
start explorer.exe
有些注册表键值修改后需要刷新桌面生效,可以这样实现: RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
有些注册表键值修改后可以直接生效。有些注册表键值修改后需要重启explorer生效。有些注册表键值修改后必须重启或者注销才能生效。
编辑注册表不当可能会严重损坏您的系统。在更改注册表之前,应备份计算机上任何有价值的数据。
5、字符串处理
批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集。批处理中可实现的字符串处理功能有:截取字符串内容、替换字符串特定字段、合并字符串、扩充字符串等功能。
【 1、截取字符串 】
截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符。举例说明其基本功能:
@echo off
set ifo=abcdefghijklmnopqrstuvwxyz0123456789
echo 原字符串(第二行为各字符的序号):
echo %ifo%
echo 123456789012345678901234567890123456
echo 截取前5个字符:
echo %ifo:~0,5%
echo 截取最后5个字符:
echo %ifo:~-5%
echo 截取第一个到倒数第6个字符:
echo %ifo:~0,-5%
echo 从第4个字符开始,截取5个字符:
echo %ifo:~3,5%
echo 从倒数第14个字符开始,截取5个字符:
echo %ifo:~-14,5%
pause
当然,上面的例子只是将字符串处理的基本功能展示出来了,还看不出字符串处理具体有什么用处。下面这个例子是对时间进行处理。
@echo off
echo 当前时间是:%time% 即 %time:~0,2%点%time:~3,2%分%time:~6,2%秒%time:~9,2%厘秒
pause
【 2、替换字符串 】
替换字符串,即将某一字符串中的特定字符或字符串替换为给定的字符串。举例说明其功能:
@echo off
set aa=伟大的中国!我为你自豪!
echo 替换前:%aa%
echo 替换后:%aa:中国=中华人民共和国%
echo aa = %aa%
set "aa=%aa:中国=中华人民共和国%"
echo aa = %aa%
pause
对于上面的例子有一点说明,对比两个echo aa = %aa%可以发现,如果要修改变量aa的内容的话,就需要将修改结果"%aa:中国=中华人民共和国%"赋值给变量aa。上面的字符串截取也有着同样的特点。
【 3、字符串合并 】
其实,合并字符串就是将两个字符串放在一起就可以了。举例说明:
@echo off
set aa=伟大的中国!
set bb=我为你自豪!
echo %aa%%bb%
echo aa=%aa%
echo bb=%bb%
set "aa=%aa%%bb%"
echo aa=%aa%
pause
同样,如果要改变变量aa的内容的话,就需要将合并结果"%aa%%bb%"赋值给变量aa。
【 4、扩充字符串 】
对表示文件路径的字符串进行特殊的处理,具体功能罗列如下:
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充 到找到的第一个完全合格的名称。如果环境变量名 未被定义,或者没有找到文件,此组合键会扩充到 空字符串
可以组合修饰符来得到多重结果:
%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR
=========================================
其中的I代表变量I,不过需要说明的是,不是所有的变量都能够进行扩充的,有两个条件:1、该字符串代表一个文件路径;2、变量要用%x来表示,x可取a-z A-Z 0-9共62个字符中的任意一个。
常用总结:
字符串替换
%var:str1=str2%:将字符串变量%var%中的str1替换为str2
字符串截取
%a:~[m[,n]]%
%a:~0,n% 取左边n位
%a:~-m% 取右边m位
%a:~m,n% 从m+1位开始取n位
%a:~m,-n% 从m+1位开始,至倒数n+1位
%a:~m % 从m+1位开始取右边全部。