前言
这里主要是带着过一下相关的简单概念和用法, 是对于有一定的基础和编写脚本经验的同学而言, 那么一般下面的用法都是一眼看出作用和原理起到一个复习的作用。对于不熟悉的可以查询相关命令和百度即可。
第四章 批处理中的变量
批处理中的变量,我把他分为两类,分别为”系统变量”和”自定义变量”
一、系统变量
他们的值由系统将其根据事先定义的条件自动赋值,也就是这些变量系统已经给他们定义了值,
不需要我们来给他赋值,我们只需要调用而以!
- %ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。
- %APPDATA% 本地 返回默认情况下应用程序存储数据的位置。
- %CD% 本地 返回当前目录字符串。
- %CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。
- %CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
- %COMPUTERNAME% 系统 返回计算机的名称。
- %COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
- %DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关
- date 命令的详细信息,请参阅 Date。
- %ERRORLEVEL% 系统 返回上一条命令的错误代码。通常用非零值表示错误。
- %HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
- %HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
- %HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是
在“本地用户和组”中指定的。
- %LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。
- %NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
- %OS% 系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。
- %PATH% 系统 指定可执行文件的搜索路径。
- %PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
- %PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值:x86 或 IA64 基于
Itanium- %PROCESSOR_IDENTFIER% 系统 返回处理器说明。
- %PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
- %PROCESSOR_REVISION% 系统 返回处理器的版本号。
- %PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
- %RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
- %SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)
NOTE : echo %WINDIR% 这样就能显示一个变量的值
二、自定义变量
故名思意,自定义变量就是由我们来给他赋予值的变量
要使用自定义变量就得使用set命令了,看例子.
@echo off
set var=我是值
echo %var%
pause
保存为BAT执行,我们会看到CMD里返回一个 “我是值”
var为变量名,=号右变的是要给变量的值
这就是最简单的一种设置变量的方法了
如果我们想让用户手工输入变量的值,而不是在代码里指定,可以用用set命令的/p参数
例子:
@echo off
set /p var=请输入变量的值
echo %var%
pause
var变量名 =号右边的是提示语,不是变量的值
变量的值由我们运行后自己用键盘输入!
第五章 set命令详解
简单的介绍了一下SET设置自定义变量的作用,现在我来具体讲一下set的其他功能.
一、用set命令设置自定义变量
前面已有部分应用, 这里就不加赘述了
set /p 是命令语法 var是变量名 =号右边的”请输入变量的值: “,这个是提示语,不是变量的值了!
运行后,我们在提示语后面直接输入1,就会显示一行您输入了 1 ~_~
好了,先回顾到这,现在讲SET其他功能
使用set /?查看SET的帮助我们发现SET除了我上面讲的
SET [variable=[string]]
SET /P variable=[promptString]
//这两种语法外,还有如下几种语法:
SET /A expression
//环境变量替换已如下增强:
%PATH:str1=str2%
%PATH:~10,5%
%PATH:~-10%
%PATH:~0,-2%
这机种语法有什么用处呢?下面我们来一个个讲解他们!
二、用set命令进行简单计算
语法:SET /A expression
/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:
() -分组
! ~ - -一元运算符
* / % -算数运算符
+ - -算数运算符
<< >> -二进制逻辑移位
& -二进制按位“与”
^ -二进制按位“异”
| -二进制按位“或”
= *= /= %= += -= -算数赋值
&= ^= |= <<= >>= -二进制运算赋值
, -表达式分隔符
@echo off
set /p input=请输入计算表达式:
set /a var=%input%
echo 计算结果:%input%=%var%
pause
三、用set命令进行字符串处理
1、字符串替换
好了,符号说到这,现在说%PATH:str1=str2%
上面语法的意思就是:将字符串变量%PATH%中的str1替换为str2
这个是替换变量值的内容,看例子
@echo off
set a= bbs. verybat. cn
echo 替换前的值: "%a%"
set var=%a: =%
echo 替换后的值: "%var%"
pause
请注意:字符串的替换和截取功能在引用变量的地方均可以,并不一定必须要有set命令 例: @echo off set
a=bbs.verybat.cn echo 替换前的值: “%a%” echo 替换后的值: “%a:.=伤脑筋%” pause
此例在echo语句中就替换了字符串,效果一样。
2、字符串截取
a=bbs.verybat.cn
%a:~1,2% =“bs” 偏移量1,从第二位开始向右取2位
%a:~-3% =“.cn” 偏移量负3,即倒数3位(也可理解为留下右边3位),右取全部
%a:~3% =“.verybat.cn” 偏移量3(也可理解为去掉左边3位),右取全部
%a:~0,-3% =“bbs.verybat” 偏移量0,右取长度至负3,即倒数3位
%a:~2,-3% =“s.verybat” 偏移量2,右取长度至负3,即倒数3位
所以,截取功能统一语法格式为: %a:~[m[,n]]%
方括号表示可选,%a%为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以简单理解为“偏移”即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)
上面所述用法其实相当于vbs函数mid、left、right
%a:~0,n% 相当于函数left(a,n) 取左边n位
%a:~-m% 相当于函数right(a,m) 取右边m位
%a:~m,n% 相当于函数mid(a,m+1,n) 从m+1位开始取n位
%a:~m,-n% 相当于函数mid(a,m+1,len(a)-m-n),从m+1位开始,至倒数n+1位
%a:~m % 相当于函数mid(a,m+1,len(a)-m) 或者right(a,len(a)-m),从m+1位开始取右边全部。
思考题目:输入任意字符串,求字符串的长度
@echo off
set /p str=请输入任意长度的字符串:
echo 你输入了字符串:"%str%"
call :stringlenth "%str%" num
echo 字符串长度为:%num%
pause
exit
:StringLenth.bat
::---------字符串长度计算子程序
::---------参数%1为字符串(如有空格,请用引号括起来)
::---------参数%2为返回变量名称,不能含空格或特殊字符
::@echo off
set theString=%~1
if not defined theString goto :eof
set Return=0
:StringLenth_continue
set /a Return+=1
set thestring=%thestring:~0,-1%
if defined thestring goto StringLenth_continue
if not "%2"=="" set %2=%Return%
goto :eof
后记
结束了变量和set命令的讲解, 一般这些内容已经能满足日常的需要了, 在后面, 我们将介绍DOS高级编程的一些基本例子并熟悉DOS
参考文章 :
DOS批处理教程