来自:zip11 > 馆藏分类
配色: 字号:
cmd set设置变量
2018-01-26 | 阅:  转:  |  分享 
  
set,E文翻译过来就是“设置”的意思,相当于数学里的“令”。?如:setX=5,就是令X=5的意思。?语法形式:SET[variabl
e=[string]]?SET/Pvariable=[promptString]??SET/Aexpression一、SE
T[variable=[string]]?示例1:@echooff??setpause??显示所有的变量的值示例2:?@ech
ooff??setvar=我是值?echo%var%??pause??请看setvar=我是值,这就是BAT直接在批处
理中设置变量的方法!??set是命令var是变量名=号右边的"我是值"是变量的值?在批处理中我们要引用这个变量就把var变量
名用两个%(百分号)扩起来,如%var%二、SET/Pvariable=[promptString]?有时候我们需要提供一个交
互界面,让用户自己输入变量的值,然后我们在来根据这个值来做相应操作,现在我就来说说这SET的这种语法,只需要加一个"/P"参数
就可以了!??实例1:??@echooff??set/pvar=请输入你的名字:echo您的名字是:%var%pauses
et/p是命令语法var是变量名=号右边的"请输入变量的值:",这个是提示语,不是变?量的值了!??运行后,我们在提示语
后面直接输入robin,就会显示一行您”您的名字是:robin”??三、SET/Aexpression??/A命令行开关指
定等号右边的字符串为被评估的数字表达式。该表达式解析很简单并以递减的优先权顺序支持下列操作:?()-分组?!~--一元
运算符?/%-算数运算符?+--算数运算符?<<>>-逻辑移位?&-按位“与”??^-按位“异”??
|-按位“或”??==/=%=+=-=&=^=|=<<=>>=-赋值?,-表达式分隔符?set的
/A参数就是让SET可以支持数学符号进行加减等一些数学运算!??现在开始举例子介绍这些数学符号的用法:??看例子这里的例子请直接
在CMD下拷贝命令运行,不需要保存为BAT!??set/avar=1+1set/a语法,var变量名1+1数
学式子?拷贝运行后会直接显示一个2,或者运行完后我们输入echo%var%,也是二,这就是?一个简单的加法运算!?复制代码代码
如下:set/avar=2-1结果是多少呢?如果你看不到结果就echo%var%.....??set/avar=2
2乘法运算?set/avar=2/2除法运算?set/avar=(1+1)+(1+1)结果等于4看得
懂吧!??实例1:复制代码代码如下:@echooffset/aa=1+1,b=2+1,c=3+1?echo%a%%b%
%c%实例2:复制代码代码如下:@echooffseta=100setb=1000set/ac=a+bechothe
resultis:%c%pause有时候我们需要直接在原变量进行加减操作就可以用这种语法?set/avar+=1这样的语
法对应原始语法就是set/avar=%var%+1??都是一样的结果,在原变量的值上在进行数学运算,不过这样写简单一点
?在来一个:set/avar=2其他都这么用,只要帮助里有这个语法!??另外还有一些用逻辑或取余操作符,这些符号,按照上面的
使用方法会报错的?比如我们在CMD里输入set/avar=1&1"与运算",他并不会显示为1,而是报错,??为什么?对于
这样的"逻辑或取余操作符",我们需要把他们用双引号引起来,看例子?复制代码代码如下:set/avar=1"&"1这样结
果就显示出来了,其他逻辑或取余操作符用法?set/avar=1"^"1异运算?set/avar=1"%"1
取模运算?set/avar=2"<<"2位左移?set/avar=4">>"2位右移实例3:复制代码代码如
下:@echooffseta=100setb=1000set/ac=a+bset/ac=c"<<"2echo
theresultis:%c%pause这些符号也可以用&=^=|=<<=>>=这样的简单用法如?set/av
ar"&="1等于set/avar=%var%"&"1注意引号?set的通常用法示例:?1、set显示环境变量
:?如:在命令行下输入:?set会显示当前所有的系统环境变量?setc会显示所有的以c开头或C开头的变量(也即不区分大小写)
;?setcom会显示所有的以com开头或COM开头的变量(不区分大小写);?2、set设置环境变量,用法示例:set表达
式,?如:setstr=ok?就是将变量str的值设置成字符串“OK”?注意:setstr=ok>?这个在批处理运行过程中会出
错,系统会提示:“命令语法不正确。”?原因是,因为变量str中的值“ok>”的字符">"为一特殊字符,会被系统当成定向符处
理,所以会运行出错,那如果确实要设置这样的变量str,值为"ok>"怎么办呢?解决办法有二:将特殊字符转义,转义方法在该特殊字符
前加一个“^”,如:setstr=ok^>(这种方法比较少用,因为没有多少应用价值)?常见的解决办法,在set后面将整个表达式
用引号括起来,如:set"str=>"?3、带参数/a的set数值计算?set的/A参数就是让SET可以支持数学符号进行加
减等一些数学运算!支持的数学运算包含(优先权递减):?()-分组?!~--一元运算符?/%-算数运算符?+
--算数运算符?<<>>-逻辑移位?&-按位“与”?^-按位“异”?|-按位“或”?==/=%=
+=-=-赋值?&=^=|=<<=>>=?,-表达式分隔符?用法示例:set/anum=210,这样变量n
um的值将变为:20?复制代码代码如下:set/avar=2-1结果是多少呢?如果你看不到结果就echo%var%..
...?set/avar=22乘法运算?set/avar=2/2除法运算?set/avar=(1+1)
+(1+1)结果等于4看得懂吧!?set/aa=1+1,b=2+1,c=3+1运行后会显示一个4,但我们用?echo
%a%%b%%c%后看结果,会发现其他数学运算也有效果!,这就是"斗"号的?作用!?有时候我们需要直接在原变量进行加减操作就可
以用这种语法?set/avar+=1这样的语法对应原始语法就是set/avar=%var%+1?都是一样的结果。
?对于"逻辑或取余操作符",我们需要把他们用双引号引起来,看例子?复制代码代码如下:set/avar=1"&"1这样结
果就显示出来了,其他逻辑或取余操作符用法?set/avar=1"+"1异运算?set/avar=1"%"1
取模运算?set/avar=2"<<"2次方运算?set/avar=4">>"2这个不太记得数学里的叫法.
...?这些符号也可以用&=^=|=<<=>>=这样的简单用法如?set/avar"&="1等于set/av
ar=%var%"&"1注意引号?4、带参数/p的set等待用户输入?windows2000和windows
是没有choice这个命令,choice的等待用户输入功能就要通过set/p来实现?演示如下:?复制代码代码如下:@echoo
ff?set/pstr=请输入你想输入的字符:?echo你输入的字符串为:%str%?pause>nul?set/p的特殊
应用(set/p=hooff?for/l%%iin(1170)do(?set/p=O150)dover>nul?)?pause>nul?注:代码中用到了一句for/l%%ain(1150)do
ver>nul,它的目的是利用for循环运行某一命令来达到延时的目的。?5、利用set截取字符保存下面的代码为test.bat运
行查看即可。?复制代码代码如下:@echooff&color1f&remnum=15nums=30?modecon:c
ols=80lines=35?set"var=1234567890"?set"num="?set"nums="?rem
第一屏舍弃?cls&echo第一屏舍弃?echo\&echo%num%var=%var%&echo\?for/l%
%iin(113)docall:dan%%i?echo\?for/l%%iin(011)docal
l:yi%%i?echo\?for/l%%iin(012)docall:_yi%%i?echo~波浪号
后面的数字:为正数表示舍弃变量的前位;?echo,逗号后面的数字为正数表示取变量的舍弃以后的前几位;?echo,逗号后面为
负数表示舍弃变量的后几位?echo\&echo\&pause&color1e?rem第二屏取?cls&echo第二屏取?
echo\&echo%num%var=%var%&echo\?for/l%%iin(-1-1-3)docall
:dan%%i?echo\?for/l%%iin(-4-1-6)docall:er%%i?echo\?ca
ll:_er-8?echo~波浪号后面直接跟负数表示取变量的后几位?echo,逗号后面的数字为正数表示取变量的舍弃以后
的前几位;?echo,逗号后面为负数表示舍弃变量的后几位?echo\&echo\&pause&color1f?rem第三屏
替换删除?cls&echo第三屏替换删除?set"var=abc:\123\ef:g\123\456"hij"789"
klm\"?echo\&echo%num%var=%var%?echo\?call:san?echo=号左边为要替换掉的字
符,右边为需替换来的字符?echo=号左边要替换掉的字符前面加个号,代表第一次出现的字符及其前面的所有字符?echo\?e
cho=========演示完毕=========按任意键退出==========?pause>nul?exit?:da
n?setshu=%1?if%shu%lss0(setaa=取&setji=最后)elsesetaa=舍弃&s
etji=前?if"%shu:~0,1%"=="-"setshu=%shu:~1%?setstr1=%%var:~%1%
%%num%?setstr2=%aa%var的%ji%%shu%位%nums%?callsetstr3=%%var:~%1%
%%num%?callecho%%str1:~0,15%%%%str2:~0,30%%%%str3:~0,15%%?got
o:eof?:yi?setshu=%1?if%shu%lss0(setaa=取&setji=最后)elsese
taa=舍弃&setji=前?for/l%%iin(113)do(?setstr1=%%var:~%1,%%
i%%%num%?setstr2=%aa%var的%ji%%shu%位之后取%%i位%nums%?callsetstr3=%
%var:~%1,%%i%%%num%?callecho%%str1:~0,15%%%%str2:~0,26%%%%str
3:~0,15%%?if%%i==3echo\?)?goto:eof?:_yi?for/l%%iin(-1-1-
3)do(?setstr1=%%var:~%1,%%i%%%num%?setstr2=舍弃var的前%1位和%%i位%nu
ms%?callsetstr3=%%var:~%1,%%i%%%num%?callecho%%str1:~0,15%%%
%str2:~0,28%%%%str3:~0,15%%?if%%i==-3echo\?)?goto:eof?:er?set
sss=%1?setsss=%sss:~1%?for/l%%iin(113)do(?setstr1=%%va
r:~%1,%%i%%%num%?setstr2=从var的倒数%sss%位开始取%%i位%nums%?callsetstr
3=%%var:~%1,%%i%%%num%?callecho%%str1:~0,15%%%%str2:~0,24%%%%
str3:~0,15%%?if%%i==3echo\?)?goto:eof?:_er?setsss=%1?setsss=
%sss:~1%?for/l%%iin(-1-1-3)do(?setstr1=%%var:~%1,%%i%%%n
um%?setstr2=从var的倒数%sss%位开始并舍弃最后%%i位%nums%?callsetstr3=%%var:~
%1,%%i%%%num%?callecho%%str1:~0,15%%%%str2:~0,20%%%%str3:~0,1
5%%?if%%i==-3echo\?)?goto:eof?:san?setstr1=%%var:"=%%%num%?se
tstr2=删除var中的所有^"号%num%?setstr3=%var:"=%%nums%?callecho%%str1
:~0,13%%%%str2:~0,23%%%%str3:~0,30%%?setstr1=%%var:\=%%%num%?s
etstr2=删除var中的所有\号%num%?setstr3=%var:\=%%nums%?callecho%%str1
:~0,13%%%%str2:~0,23%%%%str3:~0,30%%?setstr1=%%var::=%%%num%?s
etstr2=删除var中的所有:号%num%?setstr3=%var::=%%nums%?callecho%%str1
:~0,13%%%%str2:~0,23%%%%str3:~0,30%%?echo\?setstr1=%%var:"=好%%
%num%?setstr2=替换var中的所有^"号为好字%num%?setstr3=%var:"=好%%nums%?call
echo%%str1:~0,12%%%%str2:~0,20%%%%str3:~0,30%%?setstr1=%%var
:\=好%%%num%?setstr2=替换var中的所有\号为好字%num%?setstr3=%var:\=好%%nums%
?callecho%%str1:~0,12%%%%str2:~0,20%%%%str3:~0,30%%?setstr1=
%%var::=好%%%num%?setstr2=替换var中的所有:号为好字%num%?setstr3=%var::=好%%
nums%?callecho%%str1:~0,12%%%%str2:~0,20%%%%str3:~0,30%%?echo
\?setstr1=%%var:"=%%%num%?setstr3=%var:"=%%nums%?echo删除var中的
第一次出现的^"号及其前面的所有字符?callecho%%str1:~0,15%%%%str3:~0,30%%?echo.?
setstr1=%%var:\=%%%num%?setstr3=%var:\=%%nums%?echo删除var中的第一
次出现的\号及其前面的所有字符?callecho%%str1:~0,15%%%%str3:~0,30%%?echo.?set
str1=%%var::=%%%num%?setstr3=%var::=%%nums%?echo删除var中的第一次出现
的:号及其前面的所有字符?callecho%%str1:~0,15%%%%str3:~0,30%%?echo\?setst
r1=%%var:"=ppp%%%num%?setstr3=%var:"=ppp%%nums%?echo替换var中的第一
次出现的^"号及其前面的所有字符为ppp?callecho%%str1:~0,15%%%%str3:~0,30%%?echo
.?setstr1=%%var:\=ppp%%%num%?setstr3=%var:\=ppp%%nums%?echo替
换var中的第一次出现的\号及其前面的所有字符为ppp?callecho%%str1:~0,15%%%%str3:~0,30
%%?echo.?setstr1=%%var::=ppp%%%num%?setstr3=%var::=ppp%%nums%
?echo替换var中的第一次出现的:号及其前面的所有字符为ppp?callecho%%str1:~0,15%%%%str
3:~0,30%%?echo\?goto:eof?批处理Set命令详解补充篇一、设置自定义变量复制代码代码如下:@echoo
ff?setvar=我是值?echo%var%?pause二、设置自定义变量,并接受用户输入作为值?复制代码代码如下:@ech
ooff?@echooff?set/pvar=请输入变量的值:?if%var%==1echo您输入了1~_~
?pause三、SET/Aexpression?set的/A参数就是让SET可以支持数学符号进行加减等一些数学运算!支持的数
学运算包含(优先权递减):?复制代码代码如下:()-分组?!~--一元运算符?/%-算数运算符?+--
算数运算符?<<>>-逻辑移位?&-按位“与”?^-按位“异”?|-按位“或”?==/=%=+=-=
-赋值?&=^=|=<<=>>=?,-表达式分隔符?Batch代码?复制代码代码如下:set/avar=2-
1结果是多少呢?如果你看不到结果就echo%var%.....?set/avar=22乘法运算?set/av
ar=2/2除法运算?set/avar=(1+1)+(1+1)结果等于4看得懂吧!?set/aa=1+1,b
=2+1,c=3+1运行后会显示一个4,但我们用?echo%a%%b%%c%后看结果,会发现其他数学运算也有效果!,这就是
"斗"号的作用!?有时候我们需要直接在原变量进行加减操作就可以用这种语法?set/avar+=1这样的语法对应原始语法就是s
et/avar=%var%+1?都是一样的结果。?对于"逻辑或取余操作符",我们需要把他们用双引号引起来,看例子?Ba
tch代码?复制代码代码如下:set/avar=1"&"1这样结果就显示出来了,其他逻辑或取余操作符用法?set/a
var=1"+"1异运算?set/avar=1"%"1取模运算?set/avar=2"<<"2次
方运算?set/avar=4">>"2这个不太记得数学里的叫法....?这些符号也可以用&=^=|=<<=>>
=这样的简单用法如?set/avar"&="1等于set/avar=%var%"&"1注意引号?下面是一个
具体的例子:复制代码代码如下:@echooff?setp=123?title密码是%p%?setn=1?:in?if%n
%gtr3gotowrong?set/pa=请输入您需要登陆的密码:?if"%a%"equ"%p%"goto
right?set/an+=1?gotoin?:right?echo猜对了,新年快乐!?gotoend?:wrong?ec
ho已经输过3次了,还不正确,退出!?:end?pause?四、替换变量值的内容?语法:setnewVar="oldVar:s
tr1=str2%?将变量oldVar的值中的str1替换成str2,并将替换后的变量值赋给newVar.?看例子?复制代码代码如
下:@echooff?seta=bbs.verybat.cn?echo替换前的值:"%a%"?setvar=%a:bbs=sss%?echo替换后的值:"%var%"?pause?对比一下,我们发现他把变量%a%的bbs给替换掉了,换成了sss.?五、字符串截取?1、%Var:~start,len%?注意:从0开始。?例如:?复制代码代码如下:@echooff?seta=www.jb51.net?setvar=%a:~1,2%?echo%var%?pause?2、%Var:~-len%?截取倒数len位?3、%Var:~0,-len%?截取从第一位开始,倒数第len位结束的值。?例子?复制代码代码如下:@echooff?seta=www.jb51.net?setvar=%a:~0,-3%?echo%var%?pause?执行后,我们发现显示的是"www.jb51.net",少了"et"?从结果分析,很容易分析出,这是把变量a的值从0位开始,?到倒数第三位之间的值全部赋予给varhttp://www.jb51.net/article/18973.htm上一页http://www.jb51.net/article/18973.htm1http://www.jb51.net/article/18973_2.htm2http://www.jb51.net/article/18973_all.htm阅读全文您可能感兴趣的文章:—9—
献花(0)
+1
(本文系zip11首藏)