在 SET 命令中添加了两个新命令行开关:
SET /A expression
SET /P variable=[promptString]
/a 参数可以让set支持数学符号进行数学运算(以下优先级递减)
() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
- 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符
【例】set /a var=(2+3)*5
set /a a=1+1,b=2+1,c=3+1【此处注意“,”的用法】
echo %a% %b% %c%
set /a var1=c,var2=vb,var3=java【此为错误命令,无法依次赋值】
set /a var*=2 等同于set /a var=%var%*2
/p命令开关允许将变量设成用户输入的一行输入。读取输入之前,显示指定的promptString(可以不指定)
set截取字符串:
%Var:~start,len%【从0开始】
【例】
@echo off
set srcString=www.baidu.com
echo 截取前: %srcString%
set destString=%srcString:~4,5%
echo 截取后: %destString%
pause
截取倒数len个字符
%var:~-len%
【例】
@echo off
set srcString=www.baidu.com
echo 截取前: %srcString%
set destString=%srcString:~-4%
echo 截取后: %destString%
pause
截取从第一位开始,倒数第len位结束的值
%var:~0,-len%
【例】
@echo off
set srcString=www.baidu.com
echo 截取前: %srcString%
set destString=%srcString:~0,-10%
echo 截取后: %destString%
pause
echo %var:~begin% 【显示var中第begin个字符以后的所有字符】
echo %var:~begin,len% 【显示var第begin个符以后的len的字符】
echo %var:~-len% 【显示var最后len个字符】
echo %var:~begin,-len% 【显示var中从begin开始,除了最后len个字符的其他字符,相 当于掐头去尾】
set var= 【取消变量】
set设置的变量在if和for的复合语句里是一次性全部替换的
【例】
@echo off
set p=aaa
if %p%==aaa (
echo %p%
echo execute here!
set p=
set p=bbb
echo %p%
)【p的值不会再改变】
输出:aaa
execute here!
aaa
读取if语句时已经将所有的%p%替换为aaa,这里说的“替换”,在/?帮助中就是“扩充”,“环境变量扩充”,可以启用“延缓环境变量扩充”,用!来引用变量,即!变量名!
上述例子可改成:
【例】
@echo off
setlocal enabledelayedexpansion
set p=aaa
if %p%===aaa (
echo %p%
echo execute here!
set p=
set p=bbb
echo !p!
::注意这里用的是"!"
)
输出:aaa
execute here!
bbb
SET /A expression
SET /P variable=[promptString]
/a 参数可以让set支持数学符号进行数学运算(以下优先级递减)
() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
- 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符
【例】set /a var=(2+3)*5
set /a a=1+1,b=2+1,c=3+1【此处注意“,”的用法】
echo %a% %b% %c%
set /a var1=c,var2=vb,var3=java【此为错误命令,无法依次赋值】
set /a var*=2 等同于set /a var=%var%*2
/p命令开关允许将变量设成用户输入的一行输入。读取输入之前,显示指定的promptString(可以不指定)
set截取字符串:
%Var:~start,len%【从0开始】
【例】
@echo off
set srcString=www.baidu.com
echo 截取前: %srcString%
set destString=%srcString:~4,5%
echo 截取后: %destString%
pause
截取倒数len个字符
%var:~-len%
【例】
@echo off
set srcString=www.baidu.com
echo 截取前: %srcString%
set destString=%srcString:~-4%
echo 截取后: %destString%
pause
截取从第一位开始,倒数第len位结束的值
%var:~0,-len%
【例】
@echo off
set srcString=www.baidu.com
echo 截取前: %srcString%
set destString=%srcString:~0,-10%
echo 截取后: %destString%
pause
echo %var:~begin% 【显示var中第begin个字符以后的所有字符】
echo %var:~begin,len% 【显示var第begin个符以后的len的字符】
echo %var:~-len% 【显示var最后len个字符】
echo %var:~begin,-len% 【显示var中从begin开始,除了最后len个字符的其他字符,相 当于掐头去尾】
set var= 【取消变量】
set设置的变量在if和for的复合语句里是一次性全部替换的
【例】
@echo off
set p=aaa
if %p%==aaa (
echo %p%
echo execute here!
set p=
set p=bbb
echo %p%
)【p的值不会再改变】
输出:aaa
execute here!
aaa
读取if语句时已经将所有的%p%替换为aaa,这里说的“替换”,在/?帮助中就是“扩充”,“环境变量扩充”,可以启用“延缓环境变量扩充”,用!来引用变量,即!变量名!
上述例子可改成:
【例】
@echo off
setlocal enabledelayedexpansion
set p=aaa
if %p%===aaa (
echo %p%
echo execute here!
set p=
set p=bbb
echo !p!
::注意这里用的是"!"
)
输出:aaa
execute here!
bbb