[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
举个栗子
  1. @echo off&setlocal enabledelayedexpansion
  2. set a=1
  3. set b=@
  4. set c=%a%fedcba9876543210
  5. set /a n=0x%c:~15,1%
  6. for /f "delims=" %%a in ('more +25 "%~f0"') do (
  7.     set "str=%%a"
  8.     if "!str:%a%=!" equ "%%a" (
  9.         echo;%%a
  10.     ) else (
  11.         if not defined f (
  12.             call :loop
  13.             set f=1
  14.         ) else echo;%%a
  15.     )
  16. )
  17. pause&exit
  18. :loop
  19. for /l %%i in (0 1 8190) do (
  20.     if "!str:~%%i,%n%!" equ "%a%" (
  21.         set /a m=%%i+n
  22.         for %%j in (!m!) do echo;!str:~,%%i!%b%!str:~%%j!
  23.         goto :eof
  24.     )
  25. )
  26. 11ad3inm1di33
  27. 3eir11eeed2e1
  28. 22131e3iee1en
复制代码
1

评分人数

TOP

本帖最后由 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、如果替换掉指定字符或字符串不变则直接输出,即不包含指定字符或字符串则直接输出,如
  1. set a=123
  2. set a=%a:4=%
  3. echo;%a%
  4. set a=%a:2=%
  5. echo;%a%
  6. 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子过程亦可用以下方法
  1. :loop
  2. set "s=!str:*%a%=!#"
  3. 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!
  4. set s=!s!fedcba9876543210&set/am+=0x!s:~16,1!
  5. for %%j in (!m!) do for /f %%k in ('set/an+m') do if !m! equ 0 (
  6.     echo;!str:~,-%%k!%b%
  7. ) else echo;!str:~,-%%k!%b%!str:~-%%j!
  8. goto :eof
  9. 11ad3inm1di33
  10. 3eir11eeed2e1
  11. 22131e3iee1en
复制代码
1

评分人数

    • hongrk: 有点晕乎,但基本明白了技术 + 1

TOP

返回列表