注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

DOS中字符串的处理  

2011-04-15 17:16:31|  分类: DOS批处理 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、基本知识 

在DOS中,对字符串的处理其最简单是就字符串的连接:

set out_dir=.\out

set out_file_name=Appstore

set version=001

set out_file_name=%out_file_name%_%version%

echo %out_file_name%

最后变量out_file_name的值就是Appstore_001

在DOS中,对字符串的负责处理(替换和截取)其实是通过操作环境变量的字符串值来进行。

二、%PATH:str1=str2% 

这个是替换变量值的内容  

实例1

@echo off 

set a= bbs.verybat.cn 

echo 替换前的值: "%a%" 

set var=%a: =%

echo 替换后的值: "%var%"

pause

对比一下,我们发现他把变量%a%的空格给替换掉了,从这个例子,我们就可以发现 

%PATH:str1=str2%这个操作就是把变量%PATH%的里的str1全部用str2替换 

比如我们把上面的例子改成这样 

实例2

@echo off 

set a=bbs.verybat.cn 

echo 替换前的值: "%a%" 

set var=%a:.=伤脑筋

echo 替换后的值: "%var%" 

pause 

解释set var=%a:.=伤脑筋% 

set命令 var变量名 a是要进行字符替换的变量的值,"."为要替换的值, 

"伤脑筋"为替换后的值! 

执行后就会把变量%a%里面的"."全部替换为"伤脑筋"    

三、%PATH:~10,5%

取变量PATH从第10位开始,5个字符的值z做为新值。

实例3

@echo off 

set a=0123456789

set var=%a:~1,2%

echo %var%

set var=%a:~3,5% 

echo %var%    

四、%PATH:~-10% 

取变量PATH倒数10字符的值做为新值。

实例4

@echo off 

set a=0123456789

set var=%a:~-5%

echo %var% 

pause

结果:56780

五、%PATH:~0,-2% 

取变量PATH0字符和倒数第2个的所值做为新值。

实例5

@echo off 

set a=0123456789

set var=%a:~0,-2%

echo %var% 

pause

结果:01234567

六、综合应用
实例6
@echo off 
@title 字符串的编辑测试(下面描述用的箭头→ ← 分别表示向右、向左的意思) 
set aa=1234567890 
echo 说明:下面复合变量中,逗号前的数字表示指针偏移量,逗号后的数字表示提取的字符长度 
echo %aa:~1,5% //指针向右→偏移1位,然后从指针处开始向右→提取5个字符. 
echo %aa:~0,-3% //指针不偏移,→提取所有字符,并除去最后3个字符. 
echo %aa:~5% //单个数字,不指定长度值.表示指针→偏移5个字符,然后,→提取所有字符. 
echo %aa:~-5% //单个负值,特例,表示指针反方向偏移,从最右端起,←偏移5位,然后从指针处开始→提取所有字符.也可以简单理解为提取字符串末尾5个字符. 

echo 指针反方向偏移的情况.既是从字符串最右端起自右向左偏移.← 

echo %aa:~-2,1% //偏移量取负值,表示指针从最右端起,向左←偏移2位,然后从指针处开始向右→提取1个字符,生成新的变量值.注意字符串末尾的空格,因为空格也将作为"透明字符"提取到变量中去,切记要去掉变量末尾的空格.ctrl+A即可快速方便的检查该变量字符串末端是否含有空格. 
echo %aa:~-4,3% //最右端起,指针←偏移4位,然后→提取3个字符. 
echo %aa:~-4,-2% //从最右端起,指针←偏移4位,然后从指针处开始,→提取所有字符,并去除最后2个字符. 
实例7
echo %date:~0,10% //提取年月日信息 
echo %date:~-3% //提取星期几信息 
echo %time:~0,5% //提取时间中的时和分 
echo %time:~0,-3% //提取时和分和秒信息 
小结:
1、偏移量为正值时,表示指针向右移动;为负值时,表示指针从字符串最右端起向左移动. 
2、如果长度值为正,表示向右提取若干个字符;如果为负,表示向右提取所有字符,并去除若干个字符."若干个=长度值的绝对值。"提取字符的方向总是自左向右进行的. 
3、如果为单个数字,那么这个数字表示的是偏移量,长度值取默认值,既是字符串的"余数",也就是从指针处开始,向右方向的所有字符.如果这个数字是负数,可以简单的理解为:提取字符串末尾的若干个字符.(正确的解释应该是:表示指针反方向偏移,从最右端起,←偏移若干位,然后从指针处开始→提取所有字符) 
备注:%date%和%time%是系统内置的日期变量和时间变量。
实例8
set no=%Date:~0,4%%Date:~5,2%%Date:~8,2%%Time:~0,2%%Time:~3,2%%Time:~6,2% 
%Date:~0,4%表示年,以此类推 显示的格式为:20120515105610 
因为当时时间(time)小于10时,时间变量的第一位为空格,即为 8:31:41.75的形式。这时我们可能需要把空格去掉,即8:31:41.75。
我们可能以下的脚本来实现:
set NO=%Date:~0,4%%Date:~5,2%%Date:~8,2%
set t=%Time%
if "%t:~0,1%" ==" " (
set t=0%t:~1%
)
set NO=%Date:~0,4%%Date:~5,2%%Date:~8,2%%t:~0,2%%t:~3,2%%t:~6,2%
结束!
  评论这张
 
阅读(906)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017