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

[文本处理] [已解决]批处理怎样实现文本文件合并,处理后分割?

文件夹中有若干个文本文件,如何实现合并为一个文件,用“查找”“替换”处理后,再按原来的文件内容分割。
合并时将原来的文件名插入到各文件内容的第一行并在行首加特殊符号(如@)作为标记。
将“@+原文件名”作为分割后的文件名,并删除此行。
求助满足以上操作的两个批处理。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

看来只有退而求其次,分割前将要分割文本中的"!"替换为"^!"后,再用批处理分割文本了。

TOP

回复 7# Batcher

文件分割问题也早已解决,但自己写的还是有问题:
当文本中有英文感叹号时,分割时会被忽略掉,如何才能解决,希望大神能给予帮助。
代码如下:
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. if not exist Fenge md Fenge
  4. for /f "delims=" %%i in ('dir /s /b /a-d "*.log"') do (
  5.   for /f "delims=" %%a in ('type "%%i"') do (
  6.     set Var=%%a
  7.     if "!Var:~0,1!"=="@" (
  8.       set Name=!Var!
  9.       cd.>"Fenge\!Name!.txt"
  10.     ) else (
  11.       echo,!Var!>>"Fenge\!Name!.txt"
  12.     )
  13.   )
  14. )
  15. pause
复制代码

TOP

本帖最后由 qixiaobin0715 于 2019-7-27 10:25 编辑

已经自己解决:
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. for /f "delims=" %%i in ('dir /s /b /a-d *.txt') do (
  4.   for /f "delims=" %%a in ('type "%%i"') do (
  5.     set Var1=%%~ni
  6.     set Var2=%%a
  7.     echo,!Var1!@@@!Var2!>>全合并.log
  8.   )
  9. )
  10. pause
复制代码
文件名与文本各行是用@@@隔开的。

TOP

回复 7# Batcher

合并批处理很好用,速度也快。如果合并后每行行首都加上“文件名+@”,上面批处理如何修改。

TOP

虽然只是解决了合并问题,文本处理效率还是得到了提高。

TOP

回复 12# flashercs
替换空白行(包括空行)效率更高一点可以这样写^\s*\n,替换为空字符。
替换纯空行^\n替换为空字符。

TOP

本帖最后由 qixiaobin0715 于 2018-9-21 10:54 编辑

回复 12# flashercs
\s是任一空白字符,包括空格、制表符、换页符、回车符和垂直制表符。= [ \f\n\r\t\v]
我说的空行只包括换行符,含有空格,制表符等都不能叫空行。
\n+的意思是连续多个空行。效率更高一点可写为\n{2,}

TOP

回复 10# qixiaobin0715


    替换空行不是\n\s*\n替换为\n吗?

TOP

回复 7# Batcher
到单位处理了一个文件夹中的超过100个文件,速度很快,效果极佳。太感谢了!

TOP

本帖最后由 qixiaobin0715 于 2018-9-21 09:24 编辑

谢谢诸位关注!
1.EmEditor是可以在文件夹中多文件查找替换,但是不能跨行,比如替换空行就不行,\n+替换为\n没反应。
2.我也不想合并分割这么麻烦的折腾,但是查找替换需要用到较为复杂的正则表达式,批处理不好操作。如诸如这样的正则表达式:
^(\\[.*?](?![A-D][^一-龥\\n]+\\P{Punct})\\n(.*[一-龥].*\\P{Punct})$、
^((\\Q[00:00.00]¥\\E\\D.*\\n.*¥\\D.*\\n)?\\[.*?]¥(\\d+) *(.*)\\n\\[.*?]¥\\3? *(.*\\n))等

TOP

多文件替换字符串,合并再分割多此一举,而且EmEditor是支持对指定文件夹里的多文件进行字符串替换的
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

  1. @echo off&&setlocal enabledelayedexpansion
  2. del /q 完毕.ini
  3. for /f %%g in ('dir /b/on *.txt') do (
  4. for /f "delims=" %%i in ("%%g") do (
  5.     set "too=%%i"
  6.     set too=!too:依次=类推!
  7. ……
  8.     echo !too!>>test.ini
  9. )
  10.     move /y test.ini "%%g"
  11. )
  12. echo.>完毕.ini
  13. exit
复制代码
有n个文件,即使合并到一起,你所有的替换也是要一一进行的。同时白白增加了最后切割分离的难度。

以上是常见的文本内容替换,处理一批文件是可以的。
但对于大量,超大量的文件要处理,一次处理时间太长,不能中断,使用就不灵活了。
因此推荐我的另一个bat,分批处理调度bat,可以将大任务化解为小任务。方便实用。
http://www.bathome.net/viewthread.php?tid=47492&highlight=
目的,学习批处理

TOP

合并.bat
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /ad') do (
  3.     (for /f "delims=" %%j in ('dir /b /a-d "%%i\*.txt"') do (
  4.         echo @%%j
  5.         type "%%i\%%j"
  6.         echo,
  7.     ))>"%%i\合并.log"
  8. )
复制代码
1

评分人数

    • smss: 我所见过最助人为乐的版主技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

yes,谢谢!

TOP

返回列表