Board logo

标题: [文本处理] 批处理怎样提取文件夹下的五个文本作为一个新的文件? [打印本页]

作者: zppp85    时间: 2011-3-15 05:29     标题: 批处理怎样提取文件夹下的五个文本作为一个新的文件?

叙述如下:同一个文件夹下有五个TXT文本文件,自动提取五个文件中的第一段组合成一个新的TXT文件,有空行作标识;
比如同一个文件下有ABCDE五个文件,每个文件分别有十段文字分别为A1……A10,B1……B10,……,E1……E10,每段文字有空行隔开,利用命令提取A1,B1,C1,D1,E1作为一个新的TXT文件,依此类推
一、每提取文件中的第一段之后即进行删除,以便循环语句进行第二次提取
二、能够循环提取,直至所有TXT文本为空为止
三、提取之后在当前文件内保存为新的TXT文件名
劳烦版主大人和诸位朋友了!
请求高手帮忙,不胜感激,小弟QQ:253357598,具体需要多少费用或者您有什么要求可以跟贴或者加我QQ详谈

[ 本帖最后由 zppp85 于 2011-3-15 15:18 编辑 ]
作者: 随风    时间: 2011-3-15 07:56

合并当前目录下所有txt的第一段(以空行区分段落,仅含全角或半角空格的行也做空行处理)
  1. @echo off
  2. (for /f "delims=" %%i in ('findstr /n .* *.txt') do (
  3.     set "str=%%i"
  4.     for /f "tokens=1,2* delims=:" %%a in ("%%i") do (
  5.        if not defined .%%a (
  6.            if defined k echo;&set "k="
  7.            set kh=&set .%%a=a&set k=a
  8.         )
  9.        if "%%a:%%b:"=="%%i" set kh=a
  10.      )
  11.      if not defined kh (
  12.          setlocal enabledelayedexpansion
  13.          set str=!str:*:=!
  14.          set str=!str:*:=!
  15.          set str=!str: = !
  16.          set str=!str: =!
  17.          if defined str echo;!str!
  18.          endlocal
  19.       )
  20.      
  21. ))>tem.txt
  22. start "" "tem.txt"
复制代码

[ 本帖最后由 随风 于 2011-3-15 08:18 编辑 ]
作者: zppp85    时间: 2011-3-15 08:56

感谢随风版主无私分享!
小弟前面有几个关键点没有描述清楚,还请随风版主能再帮我看看!
一、每提取文件中的第一段之后即进行删除,以便循环语句进行第二次提取
二、能够循环提取,直至所有TXT文本为空为止
三、提取之后在当前文件内保存为新的TXT文件名
劳烦版主大人和诸位朋友了!
作者: weichenxiehou    时间: 2011-3-15 11:25

把下面的代码保存为.bat文件放到要处理的目录下运行就可以了,不过这些段落中如果有感叹号,将被忽略。
  1. @echo off&setlocal enabledelayedexpansion
  2. md new 2>nul
  3. (for /f "delims=" %%a in ('dir /b *.txt') do (
  4.   set flag=
  5.   for /f "tokens=1* delims=:" %%b in ('findstr /n .* "%%a"') do (
  6.     set "str=%%c"
  7.     if not defined str set flag=1
  8.     if not defined flag echo,!str!
  9.   )
  10.   echo,
  11. ))>new\new.txt
  12. start new\new.txt
复制代码

[ 本帖最后由 weichenxiehou 于 2011-3-15 11:37 编辑 ]
作者: Batcher    时间: 2011-3-15 11:39     标题: 回复 3楼 的帖子

请把所有的描述全部更新的顶楼
作者: weichenxiehou    时间: 2011-3-15 11:49

改进了一下,下面的代码应该能兼容所有特殊字符,只是效率方面有待提高。
  1. @echo off
  2. md new 2>nul
  3. (for /f "delims=" %%a in ('dir /b *.txt') do (
  4.   call :lp "%%a"
  5.   endlocal
  6. ))>new\new.txt
  7. start new\new.txt&goto :eof
  8. :lp
  9. set flag=
  10. for /f "tokens=1* delims=:" %%b in ('findstr /n .* %1') do (
  11.   set "str=%%c"&setlocal enabledelayedexpansion
  12.   if not defined str echo,&goto :eof
  13.   echo,!str!
  14. )
复制代码

[ 本帖最后由 weichenxiehou 于 2011-3-15 11:51 编辑 ]
作者: CrLf    时间: 2011-3-15 14:30

(for /f "tokens=2* delims=:"%%a in ('findstr /n .* *.txt^|findstr "^1:"') do echo %%b)>合并.txt
作者: qzwqzw    时间: 2011-3-15 14:52

finstr /n + sort 应该可以达到楼主的新要求
有兴趣的可以实践一下
作者: zppp85    时间: 2011-3-16 08:04

期待诸位朋友的帮助!!
作者: zppp85    时间: 2011-3-17 06:38

期待诸位朋友的帮助!!
作者: Batcher    时间: 2011-3-17 17:06     标题: 回复 10楼 的帖子

6楼不是有代码么?
作者: zppp85    时间: 2011-3-18 06:20

原帖由 Batcher 于 2011-3-17 17:06 发表
6楼不是有代码么?

呵呵,我看不懂,晕了
作者: Batcher    时间: 2011-3-21 12:57

12# zppp85


先不说能否看懂。关键是,能不能解决你的问题呢?
作者: zppp85    时间: 2011-3-21 14:22     标题: !!!

本帖最后由 zppp85 于 2011-3-21 14:27 编辑
12# zppp85


先不说能否看懂。关键是,能不能解决你的问题呢?
Batcher 发表于 2011-3-21 12:57

管理员同志,没有解决问题,程序只能获取五个TXT文件中的第一段,作为一个新的文件
但达不到自动删除第一段,然后循环提取第一段,创建新文件,请求大家帮忙
作者: zppp85    时间: 2011-3-22 16:55

向坛里的朋友求助!!
作者: tmplinshi    时间: 2011-3-24 02:02

本帖最后由 tmplinshi 于 2011-3-24 02:07 编辑
  1. @echo off
  2. set "OutDir=#1#"
  3. md "%OutDir%" 2>nul
  4. for /f "delims=" %%f in (' dir /b *.txt ') do (
  5.     if %%~zf neq 0 (
  6.         findstr /n "^$" "%%f" >.tmp
  7.         set n=0
  8.         set /p n=<.tmp
  9.         set /a n = n, n_ = n
  10.         call :o "%%f" >"%OutDir%\%%~nf_%%~xf" 2>nul
  11.     )
  12. )
  13. exit /b
  14. :o
  15. for /f "eol= usebackq delims=" %%s in ("%~1") do (
  16.     echo,%%s
  17.     set /a "n -= 1, 1 / (n - 1)" || (
  18.         more +%n_% %1 >.tmp
  19.         move .tmp %1
  20.         goto :eof
  21.     )
  22. )
  23. move .tmp %1
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2