批处理之 set语句

set语句

用set设置自定义变量

set [vaiable=[string]]
例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
:: 设置的时候等号俩边不能有空格
set var=abcd
echo var的值为%var%

:: 清除变量,使其成为未定义状态
set var=
if defined var (echo var的值为%var%) else echo var没有赋值

set var1=""
if defined var1 (echo var1的值为%var1%) else echo var1没有赋值

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

用set进行字符串处理

  1. 字符串替换
    %PATH:STR1=STR2% : 将字符串变量%PATH%中的str1替换为str2
    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    set a= bbs. bathome.cn
    echo 替换前为:"%a%"

    :: 删除里面的空格
    set var=%a: =%
    echo 替换后为: %var%

    set var1= %a:.=逗号%
    echo 替换后为: %var1%
  2. 字符串截取
    %a:~[m[,n]]% : ~偏移, m为偏移量(从0开始), n为截取长度

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
set a=www.github.com
echo 源字符串为: %a%
set var=%a:~3,5%
echo 截取的一点: %var%

:: 倒数从-1开始
:: 从第一个到倒数第三个之前的(ww.github.)
set var3=%a:~1,-3%
echo %var3%

:: 倒数第三个之后的(com)
set var4=%a:~-3%
echo %var4%

:: 从倒数第三个开始取俩个字符(co)
set var1=%a:~-3,2%
echo %var1%

::从第三个开始到结束(.github.com)
set var2=%a:~3%
echo %var2%

  1. 综合实例之求字符串长度
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @echo off
    set /p str=请输入任意长度的字符串:
    echo 你输入了字符串: "%str%"
    call :stringlenth "%str%" num
    echo 字符串长度: %num%
    pause

    :stringlenth
    :: echo %1
    :: 字符串计算子程序
    set substr=%~1
    :: echo %substr%
    :: 参数%1 为字符串"%str%", %~1则为去掉双引号
    if not defined substr goto :eof
    set Ret=0

    :stringlenth_continue
    set /a Ret +=1
    set substr=%substr:~0,-1%
    echo %substr%
    if defined substr goto stringlenth_continue
    if not "%2"=="" set %2=%Ret%
    goto :eof

用set进行简单计算

set /a expression

  1. 运算符:
1
2
3
4
5
6
7
8
9
10
11
( )             分组
! ~ - 一元运算符
* / % 算数运算符
- 算数运算符
<< >> 二进制逻辑移位
& 二进制按位“与”
^ 二进制按位“异”
| 二进制按位“或”
= *= /= %= = -= 算数赋值
&= ^= |= <<= >>= 二进制运算赋值
, 表达式分隔符
  1. 不支持浮点数
  2. 求余运算符 %%
  3. 逻辑或取余操作符, 需要用双引号括起来或者用转义字符^:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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

    @echo off
    set /p n=请输入2 的几次方:
    set /a num=1^<^<n
    echo %num%
    pause