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

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

[复制链接]
发表于 2022-2-5 15:16:10 | 显示全部楼层 |阅读模式
大家新年好。
我在做一个志愿者发放物资的统计表,求助一下。
文件夹有很多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处理,请大佬帮帮忙,谢谢。
发表于 2022-2-5 16:37:23 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
myacg + 1 谢谢啊,可用。 可惜的是有行前有空格的会 ...

查看全部评分

发表于 2022-2-5 16:41:27 | 显示全部楼层
本帖最后由 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. }
复制代码
 楼主| 发表于 2022-2-5 18:37:36 | 显示全部楼层
回复 2# flashercs
谢谢啊,可用。
可惜的是有行前有空格的会跳过,之前统计的人太潦草了,要先手动去空格。
 楼主| 发表于 2022-2-5 18:39:38 | 显示全部楼层
回复 3# idwma
格式会乱掉,幸亏你提醒先备份,不过还是谢谢你。
发表于 2022-2-7 09:32:59 | 显示全部楼层
回复 4# myacg
2楼代码不会出现你说的行首有空格会跳过。并且还会将行首空格去掉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 12:45 , Processed in 0.020427 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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