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

[文本处理] 批处理怎样根据文本内容 到文本文件里去查询结果 并复制?

本帖最后由 necnec1 于 2015-9-23 18:09 编辑

文本文件AA.TXT  内容如下

http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@

在行尾用2个@圈定的的数字  5503013330  AE03013340  5605314200  是重要的数据


在C盘根目录下的AA子目录下有几万个文本文件   总共大概有900多M   我想根据上面数据  去查找

我就假设在C盘根目录下的AA子目录下的12345.TXT里找到了5503013330这个数字 就将12345.TXT里所有的内容复制到
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@ 的后面

最后的结果类似于这样
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
sdfefsf5503013330f3fsf
dsa234235503013330fdsfdsf
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
www.asef.comAE03013340fdsfdsf
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@
fsdfdsfds33e4335605314200fdsfds

由于几万个文本 有900多M 相当大 效率很重要 请会的朋友帮帮忙

如果匹配到多个文件呢,多个文件的所有内容都复制某条记录后面?后面又是什么情况?同一行?

TOP

本帖最后由 necnec1 于 2015-9-23 20:54 编辑

回楼主 不会出现多个文件匹配的问题  我的关键字具有唯一性 只可能出现在一个文本文件中  其实只要找到对应的文本文件 后面就不需要再搜索了 直接 将里面的内容复制到AA.TXT 每一行的后面即可
你说的 后面又是什么情况?同一行?  是这样  
文本文件AA.TXT  内容像这样的 一行一组 总共3组数据   每一组行尾的2个@中间的那个数 就是我需要的结果 就拿第一组来说 5503013330
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@

我需要的最后结果就是     
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
FDASFDSA5503013330FDSAFDSA   这一行就是搜索到的文本文件里的内容
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@

TOP

对于大数据 效率肯定不理想
  1. @echo off&setlocal enabledelayedexpansion
  2. >new_aa.txt (for /f "delims=" %%i in (aa.txt) do (
  3.     set str=%%i
  4.     echo %%i
  5.     for /f "delims=" %%j in ("!str:@=\!\@\..") do (
  6.         for /f "delims=" %%k in ('findstr /ismc:"%%~nj" c:\aa\*.txt') do (
  7.             type "%%k"
  8.         )
  9.     )
  10. ))
  11. pause
复制代码

TOP

反复检索 900+MB 的文件,很难快起来
楼主AA子目录下的那些文件的内容有没有什么规律?比如固定位置,或者有固定前后缀
先把可能存在关键词的部分和对应文件路径提取出来,再两相匹配,这样也许会快些

TOP

回复 4# terse


    回复terse版主 你的批处理 最后一行 没有换行  导致跟第二组数据的开始 混在一起了 呈现这么一种效果

http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
sdfefsf5503013330f3fsf
dsa234235503013330fdsfdsfhttp://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
www.asef.comAE03013340fdsfdsf

TOP

本帖最后由 aa77dd@163.com 于 2015-9-24 00:20 编辑

回复 6# necnec1

你在他代码的第 7 行后面可以加上一个   echo;

觉得耗时更大的原因在于文件的数量, 检索时要反复的打开和关闭文件, 这会很耗时, 如果同样大的数据都在数据库里, 效率会高得多

TOP

回复 5# CrLf


    回复 5# CrLf


    回复CrLf版主   如果我吧所有的TXT文本 合并成一个900M的TXT


举例来说  下面是AA.TXT  
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@

这是BB.TXT  900M的数据
14131370@TCAC [email]DFE@T7G0345444_ABCE1403240013200.txt[/email]@ 14365184010  5503013330 3243 DFSFE 720 5 13 12 9 47 152 297 54 64 32 32
14131370@TCAC [email]TTT@AEG0342344_LOKIJ1403343313200.txt[/email]@ 14363134310  3243 3243 CCFEF 720 5 13 13 9 47 145 297 50 64 32 33
14131310@TCAC [email]AJUE@T7G0343954_ABCE1403240013200.txt[/email]@ 14365485070  3243 3243 FDSFDF 720 5 23 12 9 47 144 297 52 64 32 32
41e31a370@EEAB2 [email]THF@T7G0345334_ABCE1403240013200.txt[/email]@ 14069188010  AE03013340 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32

这2组数据 AA.TXT里的是 5503013330 AE03013340  5605314200  这3个关键数据可以保证在行尾由2个@固定
BB.TXT 重要的是14131370 14131310  41e31a370   这3个关键数据我可以保证他们在行首出现 并由一个@结束   并且他们都分布在一起  不管有多少行  这样会不会减少搜索时间?

我希望达到的效果是 由AA.TXT里先找出5503013330 然后在BB.TXT里发现了5503013330 尽管5503013330只出现了一次  但是行首的14131370却出现了2次  这2组数据我都要
最后呈现的效果是这样
http://www.XXX.com/@北京@文件@CT1000@77*12535*85688@XXX有限公司@1.284@13760.0@ECT0011615@5503013330@
14131370@TCAC [email]DFE@T7G0345444_ABCE1403240013200.txt[/email]@ 14365184010  5503013330 3243 DFSFE 720 5 13 12 9 47 152 297 54 64 32 32
14131370@TCAC [email]TTT@AEG0342344_LOKIJ1403343313200.txt[/email]@ 14363134310  3243 3243 CCFEF 720 5 13 13 9 47 145 297 50 64 32 33
http://www.XXX.com/@上海@文件@EGA20@1332*244170*644280@XXX有限公司@1.284@13760.0@ECT0011615@AE03013340@
41e31a370@EEAB2 [email]THF@T7G0345334_ABCE1403240013200.txt[/email]@ 14069188010  AE03013340 3243 CCFEF 720 5 13 12 9 47 143 297 10 64 32 32
http://www.XXX.com//@内蒙古@文件@CGCC@245*190430*674450@XXX有限公司@2.517@133750.0@ECT0018222@5605314200@

第一组出现2次  第二组出现一次  第三组没有符合的  就OK了

TOP

本帖最后由 terse 于 2015-9-24 01:41 编辑

WIN7系统  可以试下POWSHELL 的 Select-String 看是否提高点效率
另: 再看你 8楼的意思 还要再次搜索
最好把意图一次性表述清楚

TOP

8楼的例子和顶楼的例子格式完全不一样!!什么鬼!!
楼主你还是把两个文件各取一小部分扔网盘吧,不然我们写得很累,你拿到的代码针对性还不强

TOP

建议楼主理清一下思路,看了大大们的回复他们很想操刀大干,但是好像又不对你说的,所以毕竟你最了解要什么,说清楚了才能得到最关键的答案哈

TOP

返回列表