Windows批处理CMD如何截取一个字符串中指定字符后面的字符串?

比如我
set MyVarA=the.last.stand
如何使得我能
set MyVarB=【MyVarA中最后一个“点(.)”后面的字符串】

本人初学CMD不久,还望高手在给出代码的时候能多添几处注释。

1、首先打开cmd窗口,然后输入格式 :%PATH:str1=str2% 将字符串的变量%PATH%中的str1替换为str2。

2、在尝试将www.baidu.com中的.更改为。

3、字符串截取格式:%a:~[m[,n]]%  方括号表示可选,%为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以简单理解为“偏移”即可,m 为偏移量(缺省为0),n 为截取长度。

4、set var=%a:~-3%   这里就是就是把变量a 倒数 3 位的值赋予变量var。

5、最后字符串截取总结以a=www.baidu.com。

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-01-07
1 如果是取最左的特定字符(串)之后的部分可用
set "MyVarB=%MyVarA:*.=%"
意思是变量MyVarA第一个.及之前部分替换为空
则MyVarB取得last.stand
当然继续以此方法总是可以取到最后部分
:get
if not "%MyVarB:.=%"=="%MyVarB%" set MyVarB=%MyVarB:*.=%&goto :get
2 对于取最后一个点后的部分,可以把它想象成一个带后缀的文件名
for %%i in ("%MyVarA%") do set "Vq=%%~xi"
set "MyVarB=%Vq:.=%"
注: set 命令后的引号不是必要的%%~xi 表示取后缀名 for命令中的双%%符如在命令行需改为单%
因后缀名是带.的,再把点替换为空(或去掉第一字符set "MyVarB=%Vq:~1%")
3 for命令是循环命令语法比较复杂比如还可以:
for %%i in ("%MyVarA:.=","%") do set "MyVarB=%%~i"
将原串每个.换成"," 且首尾都加上引号,这样形成 "the","last","stand"的字符串
会以逗号为分隔符,循环执行do后的赋值命令,虽然执行了3次但最后一次是最终的赋值情况
还可有其它方法,建议先把如set这样的简单命令熟悉了再去研究for这样的复杂命令本回答被提问者和网友采纳
相似回答