07-CMD_set命令详解

set命令详解


一, 用set 命令设置自定义变量

作用:
    显示、设置或删除 cmd.exe  环境变量。
格式:
    SET [variable]=[string] 
        variable    指定环境变量名。 
        string      指定要指派给变量的一系列字符串。    
说明:
    1) set          : 显示所有环境变量
    2) set var=     : 清楚var的值
    3) %var%        : 引用变量的值
举例:
    d:\cmd\04>set myVar=123
    d:\cmd\04>echo %myVar%
    123 


格式:
    SET /P variable=[promptString] 
        variable, 变量名
        promptString, 提示信息
说明:
    提供一个交互界面,让用户自己输入变量的值,
举例:
    d:\cmd\04>set /p var=input value: & @echo %var%
    input value: 123
    123


二, 用set 命令进行简单计算

格式:
    SET /A expression 
说明:
    /A 命令行开关指定等号右边的字符串为被评估的数字表达式。
    该表达式评估器很简单,并以递减的优先权顺序支持下列操作: 
        ()                   分组 
        ! ~ -                一元运算符 
        * / %                算数运算符 
        + -                  算数运算符 
        << >>                二进制逻辑移位 
        &                    二进制按位“与” 
        ^                    二进制按位“异” 
        |                    二进制按位“或” 
        = *= /= %= += -=     算数赋值 
        &= ^= |= <<= >>=     二进制运算赋值 
        ,                    表达式分隔符
    十进制数字 : 不带前缀, 如 98
    八进制数字 : 前缀 0 (零), 如 0123
    十六进制数字:前缀 0x , 0xFF
举例:
  1, 
    d:\cmd\04>set num=123
    d:\cmd\04>echo %num%
    123
    d:\cmd\04>set /a num=4%num%
    4123
    d:\cmd\04>set /a num=%num%-23
    4100
  2, 计算器功能
   2.bat =>
    @echo off
    set /p expression=输入计算表达式:
    set /a var=%expression%
    echo %expression%=%var%
    pause
   MS-DOS =>
    d:\cmd\04>2.bat
    输入计算表达式:1+2+3/2
    1+2+3/2=4    
        表达式: 
  3, 逗号
    d:\cmd\04>set /a a=1+1,b=2+2
    4
    d:\cmd\04>echo %a%, %b%
    2, 4
  4, 直接在变量上运算
    d:\cmd\04>set a=1
    d:\cmd\04>set /a a+=10
    11
  5, 逻辑运算(需要将运算符用双引号包裹,或使用转义符^)
    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
  6, 2的N次方
    3.bat => 变量无需用 "%%" 包裹
    @echo off
    set /p n=请输入2的幂:
    set /a num=1 "<<" n
    echo %num%
    pause


三, 用set 命令进行字符串处理

1、字符串替换  
    格式:
        %variable:targetStr=replacementStr%
          variable      : 变量名
          targetStr     : 需要替换的字符串
          replacementStr: 替换后的内容
    举例:
        d:\cmd\04>set a=www.  baidu.com
        d:\cmd\04>echo %a%
        www.  baidu.com
        -----------------------------------------
        d:\cmd\04>set var=%a: =%        // 去掉空格
        d:\cmd\04>echo %var%
        www.baidu.com
        d:\cmd\04>set var=%a:.=#%       // 将"."换成"#"
        d:\cmd\04>echo %var%
        www#  baidu#com   
        ------------------------------------------
        d:\cmd\04>echo %a: =%
        www.baidu.com
        d:\cmd\04>echo %a:.=#%
        www#  baidu#com
2, 字符串截取
格式:
    %variable:~[ start [, length] ]%
        start   : 从第几个字符开始, 缺省为0
                    正数(+p), 总左边数p个
                    负数(-p), 从右边数p个
        length  : 截取多少个, 缺省则取到末尾
                    正数(+n), n个
                    负数(-n), 总数-n  个
举例:
    d:\cmd\04>echo %b%
    0123456789
    d:\cmd\04>echo %b:~1,4%
    1234
    d:\cmd\04>echo %b:~-3%
    789
    d:\cmd\04>echo %b:~0,-3%
    0123456    
总结:
    a=bbs.wuyou.com%a:~1,2%   =“bs”    
        偏移量 1,从第二位开始向右取 2 位 
    %a:~-3%    =“com ”   
        偏移量负 3,即倒数 3 位(也可理解为留下右边 3 位),右取全部 
    %a:~3%     =“.wuyou.com ”  
        偏移量 3(也可理解为去掉左边 3 位),右取全部 
    %a:~0,-3%    =“bbs.wuyou.”  
        偏移量 0,右取长度至负 3,即倒数 3 位 
    %a:~2,-3%    =“s.wuyou.”   
        偏移量2,右取长度至负 3,即倒数 3 位


思考: 输入任意字符串, 求其长度
    @echo off
    set /p targetStr=请输入任意长度的字符串:
    echo 您输入的字符串为: "%targetStr%"


    :: 参数1, 传入的字符串, 如有空格, 请用双引号 括起来
    :: 参数2, 返回变量的名称
    call :getStringLen "%targetStr%" len


    echo "%targetStr%" 的长度为: %len%


    :: 参数1, 传入的字符串, 如有空格, 请用双引号 括起来
    :: 参数2, 返回变量的名称
    :getStringLen


        set theString=%~1
        set count=0


        :continue
            set /a count+=1 
            set theString=%theString:~0,-1%
            rem 如果theString未定义或者值为空
            if defined theString goto continue


        if not "%2"=="" set %2=%count%
    goto :eof

你可能感兴趣的:(CMD)