标题: [文本处理] 批处理怎样提取文件夹下的五个文本作为一个新的文件? [打印本页]
作者: 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的第一段(以空行区分段落,仅含全角或半角空格的行也做空行处理)
- @echo off
- (for /f "delims=" %%i in ('findstr /n .* *.txt') do (
- set "str=%%i"
- for /f "tokens=1,2* delims=:" %%a in ("%%i") do (
- if not defined .%%a (
- if defined k echo;&set "k="
- set kh=&set .%%a=a&set k=a
- )
- if "%%a:%%b:"=="%%i" set kh=a
- )
- if not defined kh (
- setlocal enabledelayedexpansion
- set str=!str:*:=!
- set str=!str:*:=!
- set str=!str: = !
- set str=!str: =!
- if defined str echo;!str!
- endlocal
- )
-
- ))>tem.txt
- start "" "tem.txt"
复制代码
[ 本帖最后由 随风 于 2011-3-15 08:18 编辑 ]
作者: zppp85 时间: 2011-3-15 08:56
感谢随风版主无私分享!
小弟前面有几个关键点没有描述清楚,还请随风版主能再帮我看看!
一、每提取文件中的第一段之后即进行删除,以便循环语句进行第二次提取
二、能够循环提取,直至所有TXT文本为空为止
三、提取之后在当前文件内保存为新的TXT文件名
劳烦版主大人和诸位朋友了!
作者: weichenxiehou 时间: 2011-3-15 11:25
把下面的代码保存为.bat文件放到要处理的目录下运行就可以了,不过这些段落中如果有感叹号,将被忽略。- @echo off&setlocal enabledelayedexpansion
- md new 2>nul
- (for /f "delims=" %%a in ('dir /b *.txt') do (
- set flag=
- for /f "tokens=1* delims=:" %%b in ('findstr /n .* "%%a"') do (
- set "str=%%c"
- if not defined str set flag=1
- if not defined flag echo,!str!
- )
- echo,
- ))>new\new.txt
- start new\new.txt
复制代码
[ 本帖最后由 weichenxiehou 于 2011-3-15 11:37 编辑 ]
作者: Batcher 时间: 2011-3-15 11:39 标题: 回复 3楼 的帖子
请把所有的描述全部更新的顶楼
作者: weichenxiehou 时间: 2011-3-15 11:49
改进了一下,下面的代码应该能兼容所有特殊字符,只是效率方面有待提高。- @echo off
- md new 2>nul
- (for /f "delims=" %%a in ('dir /b *.txt') do (
- call :lp "%%a"
- endlocal
- ))>new\new.txt
- start new\new.txt&goto :eof
-
- :lp
- set flag=
- for /f "tokens=1* delims=:" %%b in ('findstr /n .* %1') do (
- set "str=%%c"&setlocal enabledelayedexpansion
- if not defined str echo,&goto :eof
- echo,!str!
- )
复制代码
[ 本帖最后由 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 编辑
- @echo off
-
- set "OutDir=#1#"
- md "%OutDir%" 2>nul
-
- for /f "delims=" %%f in (' dir /b *.txt ') do (
- if %%~zf neq 0 (
- findstr /n "^$" "%%f" >.tmp
- set n=0
- set /p n=<.tmp
- set /a n = n, n_ = n
- call :o "%%f" >"%OutDir%\%%~nf_%%~xf" 2>nul
- )
- )
- exit /b
-
- :o
- for /f "eol= usebackq delims=" %%s in ("%~1") do (
- echo,%%s
- set /a "n -= 1, 1 / (n - 1)" || (
- more +%n_% %1 >.tmp
- move .tmp %1
- goto :eof
- )
- )
- move .tmp %1
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |