1. 基本功能
1.1. 读写环境变量
- 读当前当前系统的环境变量。
rem 不带参数则显示所有的环境变量
set
rem 显示指定字符串开头的所有变量(包括环境变量)
set w
set win
- 修改当前系统的环境变量,注意修改只对当前命令行控制台窗口有效,不影响系统环境变量。
rem 在当前环境变量HOMEPATH之后添加
set HOMEPATH=%HOMEPATH%;"c:\SDK"
1.2. 设置和取消变量
- 语法
SET [variable=[string]]
- 设置变量
rem 没有空格的字符串变量
set a=abc
rem 如果赋值的变量中有空格,必须用双引号
set "a=abc defg"
rem 因为a中有空格,所以将a赋值给b时也必须用双引号,针对路径用双引号是安全方式
set "b=%a%"
rem 显示变量
echo %a%
rem 如果定义了变量a则显示a内容
if defined a echo %a%
rem 如果没有定义c则显示字符串"not defined c"
if not defined c echo "not defined c"
1.3. 取消变量
rem 不指定字符串即取消变量定义
set a=
rem 如果定义了变量a则显示a内容
if defined a echo %a%
rem 如果没有定义a则显示字符串"not defined c"
if not defined a echo "not defined c"
2. set /a
2.1. 语法
set /a expression
- /a 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:
操作符 | 意义 |
() | 分组 |
! ~ - | 一元运算符 |
* / % | 算数运算符 |
+ - | 算数运算符 |
<< >> | 逻辑移位 |
& | 按位“与” |
^ | 按位“异” |
= *= /= %= += -= &= ^= | = <<= >>= |
, | 表达式分隔符 |
2.2. 注意
如果您使用任何逻辑或取余操作符, 您需要将表达式字符串用引号扩起来。在表达式中的任何非数字字符串键作为环境变量名称,这些环境变量名称的值已在使用前转换成数字。如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零。这使您可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,那么它显示该表达式的最后值。该分配的操作符在分配的操作符左边需要一个环境变量名称。除十六进制有 0x 前缀,八进制有 0 前缀的,数字值为十进位数字。因此,0x12 与 18 和 022相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,因为 8 和 9 不是有效的八进制位数。
2.3. 示例
2.3.1. 基本算数
rem +-*/%
set /a val=2+4
set /a val=2 * 4
rem val==2,取整
set /a val=9/4
rem 取余
set /a val=9%4
rem 自加,如果val是首次使用则默认初始值为0
set /a val+=1
set /a val=%val%+1
rem 自乘
set /a val*=4
2.3.2 逻辑运算
- 逻辑运算表达式需要用双引号,有几种形式。
set /a val="3&6"
set /a val=3"&"6
set /a "val=3&6"
set /a "val|=3"
set /a "val=1^3"
2.3.3 其他运算
rem 移位操作符
set /a "val=3>>4"
rem 表达式分隔符
set /a a=1+1,b=2+1,c=3+1
echo %a% %b% %c%
3. set /p
3.1. 语法
命令行开关允许将变量数值设成用户输入的一行输入。读取输入行之前,显示指定的 promptString。promptString 可以是空的。[promptString] 是可选参数。
set /p variable=[promptString]
3.2. 示例
- 基本用法
rem 在please enter string提示之后输入变量内容
set /p val=please enter string
echo %val%
- 特殊用法,<相当于输出字符串不带回车换行符
set /p=[promptString]<nul
set a=Hello,
set b=world.
rem 下述代码输出 Hello,world.(不换行)
set /p=%a%<nul
set /p=%b%<nul
- 高级应用
连续输出70个.,并且每个操作延时1000个操作
@echo off
for /l %%i in (1 1 70) do (
rem 输出.不换行
set /p=.<nul
rem ver>nul输出到空,相当于延时操作
for /l %%a in (1 1 1000) do ver>nul
)
rem 暂停并将提示信息输入至空,相当于不输出提示信息
pause>nul