[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】批处理怎样把相连数字用~连接?

本帖最后由 zhanglei1371 于 2014-8-7 09:35 编辑

如何用代码实现 将连续数字的“头”和“尾”用~相连
13, 14, 15, 19
2,3,4,6,7,8,9
.....
变为:
13~15,19
2~4,6~9
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.     set str=%%a
  4.     setlocal enabledelayedexpansion
  5.     set str=!str:,= !
  6.     set str=!str:,= !
  7.     for %%b in (!str!) do (
  8.         if not defined out (
  9.          set /a a=b=out=%%b
  10.         ) else (
  11.             if !a! equ %%b (
  12.              set "out=!b!~%%b"
  13.             ) else (
  14.                 set "out=!out!,%%b"
  15.                 set "b=!out!"
  16.                 set a=%%b
  17.             )
  18.         )
  19.         set /a a+=1
  20.     )
  21.     echo,!out!
  22.     endlocal
  23. ))>b.txt
复制代码
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 CrLf 于 2014-8-7 17:43 编辑

简单暴力解,疯狂地 set:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (0 1 98) do set /a $%%a=%%a+1
  3. for /f "delims=" %%a in (a.txt) do (
  4.    set "str=,%%a,"
  5.    set "str=!str:,=,!"
  6.    set "str=!str: =!"
  7.    for %%b in (!str!) do for %%c in (!$%%b!) do (
  8.       set "str=!str:~%%b,%%c,=~%%c,!"
  9.       set "str=!str:,%%b,%%c~=,%%b~!"
  10.       set "str=!str:,%%b,%%c,=,%%b~%%c,!"
  11.    )
  12.    echo !str:~1,-1!
  13. )
  14. pause
复制代码
2

评分人数

TOP

回复 2# xxpinqz


    目测可以省掉 set str=!str:,= !,因为 , = ; 空格 tab 都是分隔符

TOP

回复 4# CrLf
多谢指点。

这set的炉火纯青啊。佩服!不过set的的缺陷最怕碰到2,3,4,1,2,3,4
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 5# xxpinqz


    先前未考虑乱序的情况,不过再加一个 set "str=!str:,%%b,%%c~=,%%b~!" 就好了,已修改

TOP

返回列表