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 /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
格式:
%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
一, 用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