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— |
|