找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19283|回复: 4

[文本处理] 求助批处理,很多纯数字,连续的按起止排列,单独的不变

[复制链接]
发表于 2023-5-9 23:00:40 | 显示全部楼层 |阅读模式
很多纯数字,排列方式如下
10000001
10000002
10000003
10000004
10000006
11000008
11000009
12000010
13000011
14000013
输出为txt文档,起止样式
10000001-10000006
11000008-11000009
12000010
13000011
14000013
发表于 2023-5-10 12:01:00 | 显示全部楼层
回复 1# gg20100109

如不介意第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe
命令行窗口方式执行:

  1. gawk "NR==1{printf("%s",$0);a=0;b=$0;next}++b==$0{a=1;next}a{printf("-%s",b-1)}{printf("\n%s",$0);a=0;b=$0}END{if(a){printf("-%s",b)}}" input.txt>output.txt
复制代码
写进脚本方式执行

  1. gawk "NR==1{printf("%%s",$0);a=0;b=$0;next}++b==$0{a=1;next}a{printf("-%%s",b-1)}{printf("\n%%s",$0);a=0;b=$0}END{if(a){printf("-%%s",b)}}" input.txt>output.txt
复制代码
注意,楼主的数据样本中缺少了10000005项,故上述脚本的实际结果为:
10000001-10000004
10000006
11000008-11000009
12000010
13000011
14000013
发表于 2023-5-10 12:08:53 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. cd "%~dp0"
  3. set "input=1.txt"
  4. (for /f "delims=" %%i in (%input%) do (
  5.     set /a n=%%i-!L!
  6.     if not defined f (
  7.             set /a f=%%i
  8.         ) else if !n! equ 1 (
  9.             set /a e=%%i,m+=1
  10.         ) else if !m! lss 1 (
  11.             echo,!f!
  12.             set /a f=%%i,m=0
  13.         ) else (
  14.             echo,!f!-!e!
  15.             set /a f=%%i,m=0
  16.         )
  17.     set /a L=%%i
  18.     )
  19. if !m! lss 1 (echo,!f!) else (echo,!f!-!e!)
  20. )>out_%input%
复制代码
 楼主| 发表于 2023-5-10 12:20:49 | 显示全部楼层
buyiyang 发表于 2023-5-10 12:08



    谢谢。
发表于 2023-5-10 14:10:08 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.      if defined n (
  4.          if !m! neq %%i (
  5.             set /a m-=1
  6.             if !n! equ !m! (echo !n!) else echo !n! -!m!
  7.             set /a n=%%i,m=n+1
  8.          ) else set /a m+=1
  9.      ) else set /a n=%%i,m=n+1
  10. )
  11. set /a m-=1
  12. if !n! equ !m! (echo !n!) else echo !n! - !m!
  13. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 21:33 , Processed in 0.018171 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表