• 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位,截取完后面的字符。

     

    我们来道综合题:输入任意字符串,求字符串的长度

    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

     出处:http://blog.sina.com.cn/s/blog_76dbbd7e0100qzid.html

    ====================================================================

    三、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 "<<" 2  左移位运算,  3 的二进制为11,左移2 位为 1100,换成十进制就是12,自行验证

    set /a var= 4 ">>" 2 右移位运算,4 的二进制为100,右移动2 位为 1,结果为1

     

    注意:凡是按位计算均需换算成二进制,然后再计算。

     

    思考题:求2 n 次方

    参考答案:

    14,

    @echo off

    set /p n=请输入2 的几次方:

    set /a num=1^<^<n

    echo %num%

    pause

     

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

     好了,关于set 命令的也就讲到这里吧,以后有什么要补充的再补上了。

     还有一些其他的总结命令,也可以参考我的另外一篇文章:批处理(bat)命令学习的一些总结

    出处:http://blog.sina.com.cn/s/blog_76dbbd7e0100qzic.html

  • 相关阅读:
    数据库
    linux
    linux
    python_函数进阶1
    python_函数初识
    python_文件操作
    python_基础数据类型补充
    python 小数据池,代码块总览
    python_基础数据类型二
    python_基础数据类型一
  • 原文地址:https://www.cnblogs.com/mq0036/p/3527543.html
Copyright © 2020-2023  润新知