--------siwuxie095
用 set 命令进行字符串处理(这个不应只属于 set 的内容,应该归属于格式内容,
在没有set 的情况下,格式仍旧适用)
1、字符串替换
%PATH:str1=str2%
将字符串变量%PATH%中的 str1 替换为 str2,由于 str1 可以是整个PATH 的值,
也可以是部分PATH 的值,所以用此语法更多是部分替换 PATH 的值
要替换全部PATH 的值,直接用 set PATH = string
需要说明的是,%PATH:str1=str2% 不依赖 set 而存在,
和 set 一起使用,只不过可以将替换后的内容赋值到某变量而已
如:
@echo off
set a= bbs. verybat. cn
::一开始的 a 变量里包含有三个空格符号。
echo替换前的值: "%a%"
set var=%a: =%
::对 a 变量里的所有内容,空格都替换掉(在这里没有替换什么内容,表示删除)
echo 替换后的值: "%var%"
pause
sublime中:
运行一览:
2、字符串截取
%a:~[m[,n]]%
方括号表示可选,% 为变量标识符,a 为变量名,冒号用于分隔变量名
和说明部分,~ 可简单理解为"偏移"即可,m 和 n 可以取正数,也可以
取负数,表不同含义
需要说明的是,%a:~[m[,n]]% 不依赖 set 可单独使用,
如:echo %time:~0,-3%,表示显示时间的时、分、秒
(不显示毫秒),set 说到底,还是赋值功能
关于%a:~[m[,n]]% 中 m n 取值含义:
m 正 或 0,n 正
舍弃变量 a 的前 m 位,后再取其 n 位
m 正 或 0,n 负
舍弃变量 a 的前 m 位和舍弃末尾的 n 位后剩下的值
m 正或 0,n 缺省
舍弃变量前 m 位后,取剩下的所有值
m 负,n 正
取变量 a 的末尾 m 位,后再取前 n 位
m 负,n 负
取变量 a 的末尾 m 位,后舍弃末尾的 n 位后剩下的值
m 负,n 缺省
取变量末尾 m 位
注意:n 值可以缺省,但不可以为 0。m 值可以是任意值
假如变量a 代表字母表的一串 26 个字母
%a:~7,3%
值为 HIJ
%a:~0,1%
值为 A
%a:~7,-3%
值为 HIJKLMNOPQRSTUVW
%a:~-7,3%
值为 TUV
%a:~-7,-3%
值为 TUVW
%a:~3%
值为 DEFGHIJKLMNOPQRSTUVWXYZ
%a:~-3%
值为 XYZ
%a:~0,-3%
值为 ABCDEFGHIJKLMNOPQRSTUVW
即m是正或 0,表示舍弃前m 位;n 是负,表示舍弃后 n 位
经典的实时显示时间:
@echo off
::time取出时间值,-3表示不显示后三位字符。这个格式只显示时间的时、分、秒。
echo%time:~0,-3%
ping -n 2 127.1>nul&cls&%0
sublime中:
set 用法格式总结:
set var=abc
直接给变量赋值
set /p var=请输入:
将用户输入赋值到变量
set /a var=num1+num2
数值计算 1
set /a var+=1
数值计算 2
一种比较怪异的写法:
@echo off
set var=123456
set cmdstr=echo%var%
%cmdstr%
pause
sublime中:
运行一览:
注意:
set 不可以对常量进行赋值
set 不可以对参数%0 - %9 进行计算
set 不可以对 for 循环变量%%i 进行计算
set 对 for 的循环上下限变量进行计算不会改变循环次数
如:这三种形式的计算都是不可以的
:: 形式1
set /a 9=4+5
:: 形式2
set /a %1+=1
:: 形式3
set /l %%i in (1,1,10) doset%%i*=3
sublime中:
再如:
对 for 上下限进行计算看,但不会改变循环次数。也就是说,循环
次数在循环开始前就固定了,不会在循环中发生任何变化
@echo off
setlocal enabledelayedexpansion
set /a min=1,max=10
for /l %%i in (!min!,1,!max!) do (
echo min=!min! max=!max!
set /a min+=1
set /a max*=2
)
pause
sublime中:
【made by siwuxie095】
