找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31190|回复: 11

[文本处理] 批处理如何提取txt文本含有指定关键字/字符串的行的第1列/第一列内容

[复制链接]
发表于 2016-7-16 18:31:56 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-17 01:17 编辑

我写了一个查询的批处理,用finstr将含有的关键字整行输出,目前的代码是按照查询的关键字整行输出的,但是不符合我的要求,我想输出后只保存第1列的数字格式,后面的几列不需要,求大神指点修正代码,小弟非常感谢
代码如下
@echo
findstr "浙江" "目标文件.txt">浙江.txt
findstr "江西" "目标文件.txt">江西.txt
findstr "福建" "目标文件.txt">福建.txt


以下是被查的目标文件名称如下,其中列和列之间是TAB的制表符隔开的
目标文件.txt
444106466        浙江        第3列        第4列        第5列
444106467        江西        第3列        第4列        第5列
444106468        福建        第3列        第4列        第5列
444106469        金华        第3列        第4列        第5列
444126468        杭州        第3列        第4列        第5列

我想输出的文本如下,只输出第1列
浙江.txt
444106466


江西.txt
444106467

福建
444106467
发表于 2016-7-16 19:25:13 | 显示全部楼层
本帖最后由 ygqiang 于 2016-7-16 19:29 编辑

回复 1# seekbook


for /f "tokens=1" %%a in (浙江.txt) do echo %%a>>浙江-new.txt
发表于 2016-7-16 19:30:15 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-16 19:31 编辑

http://www.bathome.net/thread-2189-1-1.html
没明白是要分别输出到各自文本还是一起输出到同一个文本,自己看着修改
  1. @echo off
  2. for /f "tokens=1,2" %%a in ('type "查询成功.txt"') do (
  3.     if "%%b" equ "浙江" >>"$浙江.txt" echo;%%a
  4.     if "%%b" equ "江西" >>"$江西.txt" echo;%%a
  5.     if "%%b" equ "福建" >>"$福建.txt" echo;%%a
  6. )
  7. ::注释copy /b $*.txt "合并.txt"
  8. pause
复制代码
 楼主| 发表于 2016-7-16 19:35:30 | 显示全部楼层
回复 3# pcl_test


    你好谢谢,是要分别输出各自的文档的,我不大会哈,麻烦大侠再次修正谢谢啊
 楼主| 发表于 2016-7-16 19:36:21 | 显示全部楼层
回复 2# ygqiang


    你好,不是这样的,是分别输出我指定的关键字的文本.txt 我再改下哈,要不然朋友们都不大理解
发表于 2016-7-16 19:53:58 | 显示全部楼层
回复 4# seekbook

原本就是分别输出,如果是输出到同个文本,把注释符去掉
 楼主| 发表于 2016-7-16 20:48:17 | 显示全部楼层
回复 6# pcl_test


  老大,刚才测试了好像还是不行,双击批处理时,显示窗口,但没有输出文件,我把查询成功这个文档的部分内容给传上来,为什么取不出列呢,查询的关键字不是在第三列,也有可能在后面的,我之前的思路是包含这一行的给输出,还得再麻烦您给测试下,谢谢
发表于 2016-7-16 21:31:33 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-16 23:32 编辑

回复 7# seekbook

顶楼的样本跟实际不同好么
3L改一处 tokens=1,8
发表于 2016-7-16 21:40:47 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-18 13:54 编辑
  1. //&cls&cscript -nologo -e:jscript "%~f0"<"查询成功.txt"&pause&exit
  2. var fso = new ActiveXObject('Scripting.FileSystemObject'), a={};
  3. while(!WSH.StdIn.AtEndOfStream){
  4.     var line = WSH.StdIn.ReadLine();
  5.     var m = line.match(/\s(浙江|江西|福建)\s/);
  6.     if(m){
  7.         var str = line.split(/\s+/);
  8.         a[m[1]]?a[m[1]]+=str[0]+'\r\n':a[m[1]]=str[0]+'\r\n';
  9.     }
  10. }
  11. for(var b in a)fso.OpenTextFile(b+'.txt', 2, true).Write(a[b])
  12. WSH.Echo('Done');
复制代码
 楼主| 发表于 2016-7-16 22:50:09 | 显示全部楼层
回复 9# pcl_test


    谢谢老大,太感谢了,程序可用,重写了一次代码,辛苦了
发表于 2016-7-18 13:28:41 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1,8" %%i in ('type "查询成功.txt"') do (
  3.     >>"%%j.txt" echo,%%i
  4. )
复制代码
发表于 2016-7-18 14:20:46 | 显示全部楼层
  1. gawk "match($0,/\s(浙江|江西|福建)\s/,a){print $1>a[1]".txt"}" "查询成功.txt"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:09 , Processed in 0.020688 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表