现在的位置: 首页 > 操作系统 > 正文

DOS批处理BAT变量赋值及用户输入交互式赋值

2016年04月24日 操作系统 ⁄ 共 1867字 暂无评论 ⁄ 阅读 2,914 次

【语法】

set设定或修改变量值,语法set [variable=[string]]

variable是变量名,string是给变量指定的值(一系统字符串)。

注意:变量名后紧跟等号(=),中间不可有空格,否则赋值失败。等号(=)后可以有空格,但空格会作为一个字符来出现。所以,在使用set赋值时,等号前后都不应该有空格的!

例如:

set var=2

echo %var%

在set指定变量值时,若环境中已存在该变量,则用新值替换旧值,若等号后无值,则只清除旧值。

【变量查看】

查看当前所有系统变量,直接输入set,后面不带任何参数。

查看所有以某个字母开头的一系列环境变量(就是变量),只要在set命令后加上首字母即可,如显示所有以P开头的变量,则输入:set P。若当前环境中未找到以P开头的变量名,则将errorlevel设置成1。

【变量引用】

在引用变量时,变量名的两边需要分别用百分号(%)扩起来,如%var%。

【变量赋值】

除了基本的变量赋值,set还有两种带参数的赋值方式/a和/p,这两种方式大大增强了set的功能,具体如下:

/a

等号(=)右侧会被认定为表达式并先进行计算,并将计算得到的最终值赋给变量。计算遵循常规的运算符级别进行运算,具体优先级如下:

分组:()

一元运算符:!(逻辑非)、~(求反)、-(负号)等

算数运算:*(乘)、/(除)、%(除),+(加)、-(减)

逻辑移位:<<、>>

按位:&(与),^(异),|(或)

赋值:=、*=、/=、%=、+=、-=

表达式分隔:,(同时给多个变量赋值时使用逗号隔开)

举例(自行测试时在开头加@echo off,结果加pause):

/p

交互式将变量值赋为用户输入的值,读取用户输入值前,可以有提示字符串(也可不写提示字符串,不过一般都有),例如:

上面的代码只是做简单的测试,在实际运用上非常重要,如,我们可以让用户输入用户名、密码,然后去连接Oracle数据库,去执行指定文件夹中的脚本。

【变量值字符串替换】

SET VAR2=%VAR1:str1=str2%

可以将变量(VAR1)中的值,所有的特征字符串(str1)替换为其他字符串(str2),若str2为空,则从变量中将所有str1删除。str1如:

set var1=12342

set var2=%var1:2=5%

echo 替换后的值: %var2%

将变量var1中的所有2替换为5

【变量值字符串提取】

%VAR:~x,y%

从变量(VAR)中的第x+1个字符开始的总计y个字符,若不指定y则默认取到结尾,若x和y都是负数,则使用变量的总长加上指定的偏移量或长度,如:

【延迟变量】

在批处理中引用变量有两种方式,一种是%VAR%,另一种是!VAR!,前者是静态变量,而后者是动态变量。如果变量值在复合语句(即嵌套语句)中被引用,则必须使用延迟变量。通过如下例子来看:

你以为输出的肯定应该是no了对吧,但结果打脸了,竟然输出yes!为什么在嵌套语句中我们赋值没起作用呢?

这是因为在DOS编译执行代码时,会把if语句后括号内语句当作一条语句执行而不是两条,所以,在编译执行时括号内第二条语句时,第一条赋值语句并未执行过,%var%使用的值还是yes!

再来看看开启延迟变量后,分别使用静态变量和动态变量的例子:

语句执行结果,%var%显示为yes,!var!显示为no,太神奇了!

setlocal enabledelayedexpansion用于开启延迟变量,这会告诉编译器,在遇到复合语句时,动态变量不要直接赋值执行,而要等待前面的语句执行之后,再单独执行该语句。

【常用系统变量】

%DATE%:当前日期。

%TIME%:当前时间。

%RANDOM%:0和32767之间的任意十进制数字。

%ERRORLEVEL%:当前ERRORLEVEL数值。

%0:当前完整全路径(带双引号)

%~0:当前完整全路径(无双引号)

%~s0:当前短全路径名(无双引号)

%~f0:当前全路径

%cd%:当前目录(无文件名)

%~d0:当前盘符

%~p0:当前目录(无盘符无文件名)

%~n0:当前文件名

%~x0:当前文件扩展名

%~t0:当前文件最后修改时间

%~z0:当前文件大小(B)

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?