打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
批处理命令学习之:set命令详解
批处理命令学习之:set命令详解 
绿化资料 免费实用绿软 2年前 (2014-10-04) 1084浏览 0评论

学习要点: 
 1.用set 命令设置自定义变量 
 2.用set 命令进行字符串处理 
 3.用set 命令进行简单计算 
 —————————————————————————————————– 

 一、用set 命令设置自定义变量 
 格式:set [variable=[string]] 
 variable 指定环境变量名。 string 指定要指派给变量variable的一系列字符串。 
 —————————————————————————————————– 

例1,   @echo off   set var=abcd   echo %var%   pause 
在例1中,set var=abcd 是批处理设置变量的方法。Var是变量名,而abcd则是变量名var的值。echo %var% ,在批 
 处理中我们要引用这个变量就把var 变量名用两个%(百分号)扩起来,如%var% 

注意:以下用法将清除变量variable 的值,使其变成未定义状态。 
set variable= 
 上面等号后面无任何符号,如果写成SET variable=””,此时变量值并不为空,而是等于两个引号,即”” 

例2,   @echo off   set var= 
 set var1=”” 
 if defined var (echo var的值为%var%) else echo var没有赋值 
 if defined var1 (echo var1的值为%var1%) else echo var1没有赋值 
 pause 

set还可以提供一个交互界面,让用户自己输入变量的值,然后我们在来根据这个值来做相应操作,现在我就来说说set 
 的这种语法,只需要加一个”/P”参数就可以了! 

例3, 
 @echo off 
 set /p var=请输入变量的值: 
 echo您输入了%var% 
 pause 

执行上面的批处理时,系统会提示你:“请输入变量的值:”还是自己动手尝试一下吧,呵呵! 
 —————————————————————————————————– 


 二、用set 命令进行字符串处理 

1、字符串替换 
 格式:%PATH:str1=str2% 
 意思就是:将字符串变量%PATH%中的str1 替换为str2 
 —————————————————————————————————– 

例4, 
 @echo off 
 set a= bbs. bathome. cn 
 echo替换前的值: “%a%” 
 set var=%a: =% 
 echo替换后的值: “%var%” 
 pause 

执行后显示: 
 替换前的值: ” bbs. bathome. cn” 
 替换后的值: “bbs.bathome.cn” 

对比一下,我们发现它把变量%a%的空格给替换掉了,而%PATH:str1=str2%这个操作就是把变量%PATH%的里的str1 全 
 部用str2 替换。 

例5, 
 @echo off 
 set a= bbs.bathome.cn 
 echo替换前的值: “%a%” 
 set var=%a:.=小情% 
 echo替换后的值: “%var%” 
 pause 

执行后显示: 
 替换前的值: ” bbs.bathome.cn” 
 替换后的值: ” bbs小情bathome小情cn” 

这里是把变量%a%里面的”.”全部替换为”小情”,大家多多动手练习就会了,这个没有什么难的,呵呵~~ 
 —————————————————————————————————– 

 2、字符串截取 
 格式:%a:~[m[,n]]% 
 方括号表示可选,%为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以简单理解为“ 
 偏移”即可,m 为偏移量(缺省为0),n 为截取长度(缺省为全部) 
 —————————————————————————————————– 

例6, 
 @echo off 
 set a=bbs.bathome.cn 
 set var=%a:~1,3% 
 echo %var% 
 pause 

执行显示为:bs. 
 我们来分析一下set var=%a:~1,3% ,这里%a:~1,3%就是说变量 a偏移量为1,要截取它的3位字符长度。合起来就是 
 把变量a 的值从第2 位(偏移量 1)开始,截取3 个字符赋予变量var 

例7, 
 @echo off 
 set a=bbs.bathome.cn 
 set var=%a:~1,-3% 
 echo %var% 
 pause 

执行显示:bs.bathome 
 这里就是把变量a 第2位起到倒数第3位前的值赋予var 

例8, 
 @echo off 
 set a=bbs.bathome.cn 
 set var=%a:~-3% 
 echo %var% 
 pause 

执行显示:.cn 
 这里就是就是把变量a 倒数 3 位的值赋予变量var 

例9, 
 @echo off 
 set a=bbs.bathome.cn 
 set var=%a:~-3,2% 
 echo %var% 
 pause 

执行显示:.c 
这里就是就是把变量a 倒数 3 位的值的前2位赋予变量var 
例10, 
 @echo off 
 set a=bbs.bathome.cn 
 set var=%a:~3% 
 echo %var% 
 pause 

执行显示:.bathome.cn 
 这里就是把变量a 从第3 位开始后面全部的值给变量var 

上面这几个例子要好好的记住哦,而且不要记错了! 
 我们还是总结一下吧: 
 a=bbs.bathome.cn 

%a:~1,3% ——– “bs.” 变量a 偏离1位,截取3位字符。 
%a:~1,-3% ——– “bs.bathome” 变量a 偏离1位,截取倒数第3位前的字符。 
%a:~-3% ——– “.cn” 变量a 偏离-3位,截取倒数的3位字符。 
%a:~-3,2% ——– “.c” 变量a 偏离-3位,截取倒数后3位的前两2位字符 
%a:~3% ——– “.bathome.cn”变量a 偏离3位,截取完后面的字符。 
%a:~,3% ——– “bbs” 变量a 偏离0位,截取3位字符。 
 —————————————————————————————————– 

我们来道综合题:输入任意字符串,求字符串的长度 
例11, 
 @echo off 
 set /p str=请输入任意长度的字符串: 
 echo你输入了字符串:”%str%” 
 call :stringlenth “%str%” num 
 echo字符串长度为:%num% 
 pause 
 :stringLenth 
 ::字符串长度计算子程序 
 set thestring=%~1 
 ::参数%1 为字符串”%str%”,%~1则去掉”%str%”的双引号。 
 if not defined theString goto :eof 
 set Return=0 
 :stringLenth_continue 
 set /a Return =1 
 set thestring=%thestring:~0,-1% 
 ::偏移量为1,截取倒数第1位前的所有字符。 
 if defined thestring goto stringLenth_continue 
 if not “%2″==”” set %2=%Return% 
 ::参数%2为返回变量num的名称,不能含空格或特殊字符。 
 goto :eof 
 —————————————————————————————————– 

 最后,提供一下batmat写的一个例子帮助大家对截取字符的理解吧: 

例子: 
 @echo off&color a&mode con cols=90 lines=12 
 title 截取字符练习工具 by bat-zw19750516 
 set var=1234567890一二三四五六七八九零 
 cls&echo.&echo原始图案为:%var% 
 echo.&echo注意前面有10个阿拉伯数字后面有10个语文数字,等下截取后记得看下。 
 echo.&echo命令形式为:%%var:~m,n%%,其中的m为第一个参数可负可正可为零,n为第二个参数可负可正不为零。 
 echo.&echo为了方便重复练习没有设置退出,要退出请直接关闭窗口。 
 echo.&echo请按任意键开始练习。&pause>nul 

:begin 
 set a=&set b=&set “c=” 
 cls&echo.&set /p a= 请输入第一个参数(应为小于20的整数): 
 echo %a:-=%|findstr “[^0-9]”&&goto wrong 
 if “%a%” equ “” goto wrong 
 if %a% geq 20 goto wrong 
 cls&echo.&set /p b= 请输入第二个参数(应为大于-20并不为零的整数): 
 echo %b:-=%|findstr “[^0-9]”&&goto wrong 
 if “%b%” equ “” goto wrong 
 if %b% equ 0 goto wrong 
 if %b% lss -20 goto wrong 
 set /a c=20-a b 
 if %a% lss 0 if %b% lss 0 if %a% geq %b% goto wrong 
 if %a% gtr 0 if %b% lss 0 if %c% leq 0 goto wrong 
 cls&echo.&echo原始图案为: %var% 
 echo.&echo你输入的截取命令是: %%var:~%a%,%b%%% 
 echo.&call,echo截取到的图案是:%%var:~%a%,%b%%% 
 echo.&echo请按任意键再次练习。&pause>nul&goto begin 

:wrong 
 cls&echo.&echo输入不合要求,请正确输入。&ping /n 2 127.1 >nul&goto begin 
 —————————————————————————————————– 


 三、用set 命令进行简单计算 
 格式:set /a expression 
 /a 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式评估器很简单并以递减的优先权顺序支持下 
 列操作: 

( ) 分组 
 !~– 一元运算符 
 */% 算数运算符 
 – 算数运算符 
 < >> 二进制逻辑移位 
 & 二进制按位“与” 
 ^ 二进制按位“异” 
 | 二进制按位“或” 
 = *= /= %==-= 算数赋值 
 &= ^= |= <= >>= 二进制运算赋值 
 , 表达式分隔符 

set 的/a 参数就是让set 可以支持数学符号进行加减等一些数学运算, 注意:一般的运算常为十进制运算. 
 —————————————————————————————————– 

例12, 
 @echo off 
 set /p input=请输入计算表达式: 
 set /a var=%input% 
 echo计算结果:%input%=%var% 
 pause 

注意:DOS 计算只能进行整数运算,精确到整数,它是不支持浮点计算的! 
请输入计算表达式:1 9 20 30-10 
 计算结果:1 9 20 30-10=50 
 请按任意键继续. . . 

请输入计算表达式:10/3 #除法只能精确到整数 
 计算结果:10/3=3 
 请按任意键继续. . . 

请输入计算表达式:-100 62 #负数 
 计算结果:-100 62=-38 
 请按任意键继续. . . 

请输入计算表达式:100%3 #求余数 
 计算结果:100%3=1 
 请按任意键继续. . . 

注意:以上的求余数运算符%在批处理程序中必须写成%% 
请输入计算表达式:(25 75)*2/(15 5) #括号 
 计算结果:(25 75)*2/(15 5)=10 
 请按任意键继续. . . 

请输入计算表达式:1234567890*9876543210 #范围 
 无效数字。数字精确度限为32位。 
 计算结果:1234567890*9876543210= 
 请按任意键继续. . . 

注意:上面的计算过程显示,DOS 计算只能精确到32 位,这个 32 位是指二进制32 位,其中最高位为符号位(0为 
 正,1 为负),低位31 位为数值。31 个 1 换成十进制为2147483647,所以DOS 计算的有效值范围是-2147483648 
 至2147483647,超出该数值范围时计算出错.请看下面的计算过程: 

请输入计算表达式:2147483647-1 #最大值减 1,值有效 
 计算结果:2147483647-1=2147483646 
 请按任意键继续. . . 

请输入计算表达式:2147483647 1 #最大值加 1,出错,结果为最小值 
 计算结果:2147483647 1=-2147483648 
 请按任意键继续. . . 

请输入计算表达式:-2147483648-1 #最小值减 1,出错,结果为最大值 
 计算结果:-2147483648-1=2147483647 
 请按任意键继续. . . 

我们来看一看下面的这个例子 
例13, 
 @echo off 
 set /a a=1 1,b=2 1,c=3 1 
 echo计算结果:%a% %b% %c% 
 pause 

执行显示:计算结果:2 3 4 
发现其他数学运算也有效果!,这就是表达式分隔符”逗”号的作用! 
 有时候我们需要直接在原变量进行加减操作就可以用这种语法, 
 set /a var =1对应原始语法就是set /a var = %var% 1 
 set /a var*=2对应原始语法就是set /a var = %var%*2 

另外还有一些用逻辑或取余操作符,这些符号,按照上面的使用方法会报错。比如我们在CMD 里输入set /a var=1 & 1 
 “与运算”,它并不会显示为 1,而是报错,! 
 为什么?对于这样的”逻辑或取余操作符”,我们需要把他们用双引号引起来,也可以用转义字符^,看例子set /a var= 
 1 “&” 1这样结果就显示出来了。 

其他逻辑或取余操作符用法: 
 set /a var= 1 ” ” 1异运算 
 set /a var= 1 “%” 1 取模运算 
 set /a var= 3 “<>
 set /a var= 4 “>>” 2 右移位运算,4 的二进制为100,右移动2 位为 1,结果为1 

注意:凡是按位计算均需换算成二进制,然后再计算。 
思考题:求2 的n 次方 
参考答案:   例14,   @echo off 
 set /p n=请输入2 的几次方: 
 set /a num=1^<><>
 echo %num% 
 pause 

想一下这个到底是怎么运算的?呵呵,这就留给大家思考了! 
 —————————————————————————————————– 

Janunapr 编辑于2009-09-14 星期一11:45:57.46 

转载请注明:免费实用绿色软件 >> 批处理命令学习之:set命令详解

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
批处理实现加减乘除
批处理 Set 命令详解 让你理解set命令第2/2页
BAT 命令中如何消除字符串变量前后空格?
批处理入门 -- set命令详解 - 『windows脚本』 - 网络技术交流论坛 网络技...
DOS批处理高级教程精选(六) - 第二天堂
Set语法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服