本帖最后由 pcl_test 于 2016-10-20 23:46 编辑
回复 5# hongrk
相关知识
for
call
set /a
变量延迟
字符串长度计算
字符串替换及截取
1、16进制数转10进制数
fedcba9876543210表示10进制数15~0,如set /a 0xf得15,set /a 0xa得10……
set /a n=0x%c:~15,1% 利用偏移量获取相应16进制数转10进制数,如1111fedcba9876543210,截取第16位为4,所以1111的长度为4位,0123456789fedcba9876543210,截取第16位为a,所以0123456789的长度为10位
2、如果替换掉指定字符或字符串不变则直接输出,即不包含指定字符或字符串则直接输出,如- set a=123
- set a=%a:4=%
- echo;%a%
- set a=%a:2=%
- echo;%a%
- pause
复制代码 3、对首个出现的指定字符/字符串进行替换并做标记f=1,对于余下同样包含指定字符/字符串的行,因为做了标记则直接输出
4、对于同一行含有多个指定字符/字符串的情况,利用偏移查找出首个出现的指定字符/字符串,
如123123,需替换第一个23为##,计算所知23长度为2位,那么对于123123,从第1位开始偏移,每次偏移/截取2位,则有
12 3123
1 23 123 //当截取内容等于需替换的字符/字符串,则输出1##123实现替换,goto :eof执行退出for /l循环和loop子过程
12 31 23
123 12 3
1231 23
12312 3
loop子过程亦可用以下方法- :loop
- set "s=!str:*%a%=!#"
- set m=0&for %%i in (4096 2048 1024 512 256 128 64 32 16) do if "!s:~%%i,1!" neq "" set/am+=%%i&set s=!s:~%%i!
- set s=!s!fedcba9876543210&set/am+=0x!s:~16,1!
- for %%j in (!m!) do for /f %%k in ('set/an+m') do if !m! equ 0 (
- echo;!str:~,-%%k!%b%
- ) else echo;!str:~,-%%k!%b%!str:~-%%j!
- goto :eof
- 11ad3inm1di33
- 3eir11eeed2e1
- 22131e3iee1en
复制代码
|