Board logo

标题: [文本处理] 求助批处理实现志愿者疫情物质发放统计表插入递增数字 [打印本页]

作者: myacg    时间: 2022-2-5 15:16     标题: 求助批处理实现志愿者疫情物质发放统计表插入递增数字

大家新年好。
我在做一个志愿者发放物资的统计表,求助一下。
文件夹有很多txt文件,排版也不统一乱七八糟,内容大概如下。
2022年2月4日物资发放表
负责人 XXX
工作人员 XX  XX  XX
志愿者 XX  XX  XX  XX
单号 红星村 XXX 地址 XXXXXXXXXX
  单号 榕树镇 XXX 地址 XXXXXXXXXX
XX单号 吉安村 XXX 地址 XXXXXXXXXX
单号 红星村 XXX 地址 XXXXXXXXXX
单号 红星村 XXX 地址 XXXXXXXXXX
   单号 榕树镇 XXX 地址 XXXXXXXXXX
单号 红星村 XXX 地址 XXXXXXXXXX
000单号 吉安村 XXX 地址 XXXXXXXXXX
单号 红星村 XXX 地址 XXXXXXXXXX
单号 榕树镇 XXX 地址 XXXXXXXXXX
单号 榕树镇 XXX 地址 XXXXXXXXXX
单号 红星村 XXX 地址 XXXXXXXXXX
   单号 吉安村 XXX 地址 XXXXXXXXXX
ss单号 红星村 XXX 地址 XXXXXXXXXX
单号 吉安镇 XXX 地址 XXXXXXXXXX
单号 红星村 XXX 地址 XXXXXXXXXX
ff单号 榕树镇 XXX 地址 XXXXXXXXXX
单号 吉安村 XXX 地址 XXXXXXXXXX

不同之处是村名如“红星村,榕树镇,吉安村”我想在每个村名后面按顺序插入一个递增的数字和符号"-"。变成
2022年2月4日物资发放表
负责人 XXX
工作人员 XX  XX  XX
志愿者 XX  XX  XX  XX
单号 红星村-001 XXX 地址 XXXXXXXXXX
  单号 榕树镇-001 XXX 地址 XXXXXXXXXX
单号 吉安村-001 XXX 地址 XXXXXXXXXX
XXX单号 红星村-002 XXX 地址 XXXXXXXXXX
单号 红星村-003 XXX 地址 XXXXXXXXXX
单号 榕树镇-002 XXX 地址 XXXXXXXXXX
00单号 吉安村-002 XXX 地址 XXXXXXXXXX
单号 红星村-004 XXX 地址 XXXXXXXXXX
  单号 榕树镇-003 XXX 地址 XXXXXXXXXX
fff单号 吉安村-003 XXX 地址 XXXXXXXXXX
单号 红星村-005 XXX 地址 XXXXXXXXXX
xx单号 红星村-006 XXX 地址 XXXXXXXXXX
单号 榕树镇-004 XXX 地址 XXXXXXXXXX
用bat处理,请大佬帮帮忙,谢谢。
作者: flashercs    时间: 2022-2-5 16:37

本帖最后由 flashercs 于 2022-2-5 16:39 编辑
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. cd /d "%~dp0"
  4. @REM 统计数据
  5. set srcfile="data.txt"
  6. set dstfile="data2.txt"
  7. (
  8. for /f "usebackq tokens=1,2*" %%A in (%srcfile%) do (
  9.   set f1=%%A
  10.   if "!f1:单号=!"=="!f1!" (
  11.     echo.%%A %%B %%C
  12.   ) else (
  13.     if not defined %%B (
  14.       set %%B=1001
  15.     ) else (
  16.       set /a %%B+=1
  17.     )
  18.     echo.%%A %%B-!%%B:~-3! %%C
  19.   )
  20. )
  21. )>%dstfile%
  22. endlocal
  23. pause
  24. exit /b
复制代码

作者: idwma    时间: 2022-2-5 16:41

本帖最后由 idwma 于 2022-2-5 16:59 编辑

注意先备份文件呀
  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. dir *.txt|%{
  3. $a=@{}
  4. sc $_.fullname $(foreach($i in gc -readcount 0 $_.fullname){
  5. if($i -match '..村|..镇'){
  6. $a[$matches[0]]+=1
  7. $i -replace '^(.*?)(..村|..镇)(.*)$',"`$1`$2-$('{0:d3}' -f [int]$a[$matches[0]])`$3"
  8. }else{$i}
  9. })
  10. }
复制代码

作者: myacg    时间: 2022-2-5 18:37

回复 2# flashercs
谢谢啊,可用。
可惜的是有行前有空格的会跳过,之前统计的人太潦草了,要先手动去空格。
作者: myacg    时间: 2022-2-5 18:39

回复 3# idwma
格式会乱掉,幸亏你提醒先备份,不过还是谢谢你。
作者: qixiaobin0715    时间: 2022-2-7 09:32

回复 4# myacg
2楼代码不会出现你说的行首有空格会跳过。并且还会将行首空格去掉。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2