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

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

已知:
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部分”,是因为处理文本的需要选择了“地”而非“第”

  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
复制代码
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 2# xxpinqz


    谢谢,我试试去

TOP

回复 2# xxpinqz


    非常感谢,试验确实可行,现在一个文件夹下有145个这样文本都要这样处理,怎么办?

TOP

回复 4# 1e3e
外包一个FOR 循环 试

TOP

回复 2# xxpinqz


    现在我还发现一个悲剧的问题:就是比如现在我上传的附件运行不正常,是因为行未有空白吗?我去除行未空白似乎是正常的,3县.txt这个根本运行不了,你的代码可以再完善一下吗?

TOP

回复 6# 1e3e


2县.txt试试这个代码

TOP

回复 6# 1e3e


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

或者,把
('findstr /n .* "3县.txt"')
改成
('type "3县.txt" ^| findstr /n .*')

TOP

本帖最后由 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

评分人数

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

TOP

如附件:有a县项目汇总.txt,b县项目汇总.txt,现在汇总成a县+b县项目汇总.txt。
实际上就是按照项目规划地1部分的项目汇总到一块,项目规划地2部分的项目汇总到一块,…………

TOP

本帖最后由 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

评分人数

    • 1e3e: 谢谢热心帮忙技术 + 1
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

从第一行开始,取一行,去掉行尾空格,然后插入 " 项目规划地1部分"
下一行如果是空行," 项目规划地1部分" 变成" 项目规划地2部分"
如此继续,
1

评分人数

    • 1e3e: 谢谢热心帮忙技术 + 1
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

返回列表