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

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

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

评分人数

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

回复 3# Batcher

文本文件较多,每个文件夹中的文本格式近似,需多次替换。不同文件夹文件替换替换方式又不尽相同,想合并后用EmEditor统一处理后,再分割。

TOP

yes,谢谢!

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

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

TOP

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

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

TOP

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

TOP

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

TOP

回复 7# Batcher

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

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

文件分割问题也早已解决,但自己写的还是有问题:
当文本中有英文感叹号时,分割时会被忽略掉,如何才能解决,希望大神能给予帮助。
代码如下:
  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

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

TOP

返回列表