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

[文件操作] 批处理如何查找txt文本指定列中是否含相同字符串?

[复制链接]
发表于 2015-8-26 13:39:07 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-19 12:17 编辑

查找1.txt是否含有相同字符串
1.txt内容类似于如下格式:
CQABO-SWDL-F-12     150.200.0.12     7     PORTD8801
CQABO-SWDL-F-12     150.200.0.12     6     PORTD8802
CQABO-SWDL-F-12     150.200.0.12     5     PORTD8804
CQABO-SWDL-F-12     150.200.0.12     8     PORTD8805
CQABO-SWDL-F-12     150.200.0.12     13     PORTD8807
如下代码怎么也不行,大家帮忙看是什么问题,谢谢咯
  1. SETLOCAL ENABLEDELAYEDEXPANSION
  2.         set a=0
  3.         for /f "tokens=4 delims= " %%j in (1.txt) do (               
  4.                 set /a a=!a!+1
  5.                 echo !a!
  6.                 echo %%j
  7.                 pause
  8.                 for /f "skip=!a! tokens=4 delims= " %%k in (1.txt) do (
  9.                        
  10.                         echo %%k
  11.                         if %%j==%%k ehco have two %%j
  12.                 )

  13.         )
  14. ENDLOCAL
复制代码
发表于 2015-8-26 13:53:42 | 显示全部楼层
本帖最后由 pcl_test 于 2015-8-26 14:37 编辑

第三方
  1. ::先下载http://batch-cn.qiniudn.com/tool/gawk.exe
  2. @gawk "{a[$4]++}END{for(i in a)if(a[i]>1)print i,a[i]}" "1.txt">"2.txt"
复制代码
bat+js,保存为bat运行
  1. @if(0)==(0) echo off&cscript -nologo -e:jscript "%~0"<"1.txt">"2.txt"&pause & exit/b&@end
  2. var a = {};
  3. while(!WScript.StdIn.AtEndOfStream) {
  4.     var m = WScript.StdIn.ReadLine().split(/\s+/);
  5.     a.hasOwnProperty(m[3])?(a[m[3]]++):a[m[3]]=1;
  6. }
  7. for (var i in a){if (a[i]>1)WSH.Echo(i+' '+a[i]);}
复制代码
发表于 2015-8-26 15:08:28 | 显示全部楼层

  1. @echo off
  2. for /f "tokens=4 delims= " %%j in (1.txt) do (               
  3.         set /a #%%j+=1
  4. )
  5. for /f "tokens=1,2 delims=#=" %%i in ('set #') do echo;%%i    %%j个
  6. pause
复制代码
 楼主| 发表于 2015-8-26 15:17:19 | 显示全部楼层
回复 3# 回家路上


    set /a #%%j+=1 怎么理解这句?谢谢
发表于 2015-8-26 15:21:12 | 显示全部楼层
本帖最后由 回家路上 于 2015-8-26 15:25 编辑

回复 4# 黎0130


set /a 你用了肯定知道。
#%%j就是%%j的值的前面加上#,你肯定还是知道
+=你也知道。

所以你其实不知道的只是————第二个for循环的set # 什么意思?
了解一下set 命令估计一切就了然了
set #————将#开头的变量全都显示出来


哦,你上面没用”+=“。set /a a+=1就相当于set /a a=!a!+1
发表于 2015-8-26 16:19:35 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. del b.txt>nul 2>nul
  3. del 重复内容.txt>nul 2>nul
  4. For /f "tokens=*" %%i in (1.txt) do (Findstr /x /c:"%%i" b.txt >nul 2>nul&&(echo %%i>>重复内容.txt)||
  5. (Echo %%i>>b.txt))
  6. del b.txt>nul 2>nul
  7. pause
复制代码
 楼主| 发表于 2015-8-26 19:10:11 | 显示全部楼层
回复 5# 回家路上


    我懂你的意思了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 11:36 , Processed in 0.029375 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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