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

[文本处理] 批处理如何在文本里以空白行分割的每一小段内容的每一行末尾添加特定字符串

[复制链接]
发表于 2014-1-22 14:53:16 | 显示全部楼层 |阅读模式
已知:
a县项目汇总.txt内容如下:
weewewe  wwww   sdsdsdssd     eeeeee
eweweweewe dsdsd  wewewew  dsdsd

sdsdsdsdsd sdsdsd sdsdsdsd dsdsdsdsads
sdadadaerer dsadfafa ffasdfasdf da**sfasf


dadfasf sadfafasf a**fafasf   fafasfdsafsaf
**fasfsafsafd   fafasfasfsafsaf  fasfasfasfasf
**f胗   fafasfasfeweewf  fasfarrf

现在按照其空白顺序(如图所示)依次在行尾加上使其内容如下:
weewewe  wwww   sdsdsdssd     eeeeee 项目规划地1部分
eweweweewe dsdsd  wewewew  dsdsd 项目规划地1部分

sdsdsdsdsd sdsdsd sdsdsdsd dsdsdsdsads 项目规划地2部分
sdadadaerer dsadfafa ffasdfasdf da**sfasf 项目规划地2部分


dadfasf sadfafasf a**fafasf   fafasfdsafsaf 项目规划地3部分
**fasfsafsafd   fafasfasfsafsaf  fasfasfasfasf 项目规划地3部分
**f胗   fafasfasfeweewf  fasfarrf 项目规划地3部分

说明:地1部分我没有打成“第1部分”,是因为处理文本的需要选择了“地”而非“第”
发表于 2014-1-22 15:41:56 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. set n=1
  3. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "a.txt"') do (
  4.     if "%%b" == "" (
  5.             if defined y set y=&set/an+=1
  6.             echo,
  7.     ) else (
  8.         echo,%%b 项目规划地!n!部分
  9.         set y=.
  10.     )
  11.    
  12. ))>b.txt
复制代码
 楼主| 发表于 2014-1-22 15:55:35 | 显示全部楼层
回复 2# xxpinqz


    谢谢,我试试去
 楼主| 发表于 2014-1-22 16:04:28 | 显示全部楼层
回复 2# xxpinqz


    非常感谢,试验确实可行,现在一个文件夹下有145个这样文本都要这样处理,怎么办?
发表于 2014-1-22 16:24:24 | 显示全部楼层
回复 4# 1e3e
外包一个FOR 循环 试
 楼主| 发表于 2014-1-22 16:27:42 | 显示全部楼层
回复 2# xxpinqz


    现在我还发现一个悲剧的问题:就是比如现在我上传的附件运行不正常,是因为行未有空白吗?我去除行未空白似乎是正常的,3县.txt这个根本运行不了,你的代码可以再完善一下吗?
发表于 2014-1-22 16:53:02 | 显示全部楼层
回复 6# 1e3e


2县.txt试试这个代码
发表于 2014-1-22 17:14:44 | 显示全部楼层
回复 6# 1e3e


3县.txt这个文件时unicode编码,你可以把它另存为ANSI编码。

或者,把
('findstr /n .* "3县.txt"')
改成
('type "3县.txt" ^| findstr /n .*')
发表于 2014-1-22 17:42:10 | 显示全部楼层
本帖最后由 xxpinqz 于 2014-1-22 17:55 编辑

回复 4# 1e3e
处理当前文件夹下所有txt文档,生成文件到目录new下。

  1. @echo off&setlocal enabledelayedexpansion
  2. md new 2>nul
  3. for %%i in (*.txt) do (
  4.     set n=1
  5.     set "y="
  6.     (for /f "tokens=1* delims=:" %%a in ('type "%%i" ^|findstr /n .*') do (
  7.         set "str=%%b"
  8.         if "%%b" == "" (
  9.             if defined y set y=&set/an+=1
  10.         ) else (
  11.             for /f "tokens=*" %%a in ("%%b") do (
  12.                 if not "%%a"=="" set "str=%%b 项目规划地!n!部分"
  13.             )
  14.             set y=.
  15.         )
  16.         echo,!str!
  17.     ))>"new\%%~ni(新).txt"
  18. )
复制代码

评分

参与人数 1技术 +1 收起 理由
1e3e + 1 感谢

查看全部评分

 楼主| 发表于 2014-1-23 08:15:09 | 显示全部楼层
如附件:有a县项目汇总.txt,b县项目汇总.txt,现在汇总成a县+b县项目汇总.txt。
实际上就是按照项目规划地1部分的项目汇总到一块,项目规划地2部分的项目汇总到一块,…………
发表于 2014-1-23 12:18:29 | 显示全部楼层
本帖最后由 xxpinqz 于 2014-1-23 12:24 编辑

回复 10# 1e3e
用上面的改改,大约如此

  1. @echo off&setlocal enabledelayedexpansion
  2. set /a num=f=10000
  3. (for %%i in (*.txt) do (
  4.     set /a m=n=10000,f+=1
  5.     set "y="
  6.     for /f "tokens=1* delims=:" %%a in ('type "%%i"^|findstr /n .*') do (
  7.         set "str=%%b"
  8.         if "%%b" == "" (
  9.             if defined y set y=&set/an+=1
  10.         ) else (
  11.             for /f "tokens=*" %%a in ("%%b") do (
  12.                 set/a m+=1
  13.                 if not "%%a"=="" echo,!n!:!f!!m!:%%b
  14.             )
  15.             set y=.
  16.         )
  17.     )
  18. ))>tmp
  19. (for /f "tokens=1-2* delims=:" %%a in ('type tmp^|sort') do (
  20.       if %%a neq !num! set/a num+=1&echo,
  21.       echo,%%c
  22. ))>all.txt
  23. del tmp
  24. start all.txt
复制代码
如果也要按顶楼要求,改下序号

  1. @echo off&setlocal enabledelayedexpansion
  2. set /a num=f=10001
  3. (for %%i in (*.txt) do (
  4.     set /a m=n=10001,f+=1
  5.     set "y="
  6.     for /f "tokens=1* delims=:" %%a in ('type "%%i"^|findstr /n .*') do (
  7.         set "str=%%b"
  8.         if "%%b" == "" (
  9.             if defined y set y=&set/an+=1
  10.         ) else (
  11.             for /f "tokens=*" %%a in ("%%b") do (
  12.                 set/a m+=1,nn=n%%10000
  13.                 if not "%%a"=="" echo,!n!:!f!!m!:%%b 项目规划地!nn!部分
  14.             )
  15.             set y=.
  16.         )
  17.     )
  18. ))>tmp
  19. (for /f "tokens=1-2* delims=:" %%a in ('type tmp^|sort') do (
  20.       if %%a neq !num! set/a num+=1&echo,
  21.       echo,%%c
  22. ))>all.txt
  23. del tmp
  24. start all.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
1e3e + 1 谢谢热心帮忙

查看全部评分

发表于 2014-1-23 15:29:09 | 显示全部楼层
从第一行开始,取一行,去掉行尾空格,然后插入 " 项目规划地1部分"
下一行如果是空行," 项目规划地1部分" 变成" 项目规划地2部分"
如此继续,

评分

参与人数 1技术 +1 收起 理由
1e3e + 1 谢谢热心帮忙

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 16:05 , Processed in 0.021290 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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