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

[文本处理] 批处理比较a.txt和b.txt两个文本内容,列出所有不一致,具体需求如下

[复制链接]
发表于 2023-10-29 12:52:21 | 显示全部楼层 |阅读模式
文本 a.txt内容如下(每行内容不固定):
PHIYOUSB3014TB
PHIYOUSB3014TB
PHIYOUSB3014TB
PHIYOUSB3014TB
SuperSpeedUSB
BillboardDevice

文本 b.txt内容如下(每行内容不固定):
PHIYOUSB3014TB
SuperSpeedUSB
PHIYOUSB3014TB
USBAudio

欲求效果如下:
列出b.txt比a.txt少的几行信息
PHIYOUSB3014TB
PHIYOUSB3014TB
BillboardDevice

自己写的仅能列出一行PHIYOUSB3014TB,而不是两行PHIYOUSB3014TB
发表于 2023-10-29 15:07:06 | 显示全部楼层
  1. @echo off
  2. for /f "useback delims=" %%a in ("a.txt") do (
  3.         set /a #"%%a"+=1
  4. )
  5. for /f "useback delims=" %%a in ("b.txt") do (
  6.         set /a #"%%a"-=1
  7. )
  8. for /f "tokens=1-2 delims=#=" %%a in ('set #') do (
  9.         for /l %%l in (1,1,%%b) do (
  10.                 echo %%~a
  11.         )
  12. )
  13. pause
复制代码

如果文本如样本一样简单短小,试试这样
 楼主| 发表于 2023-10-29 15:32:22 | 显示全部楼层
本帖最后由 mnokoko 于 2024-1-10 22:50 编辑

回复 2# 77七
C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_30D5:USB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_30D4:SuperSpeedUSB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_30D2:SuperSpeedUSB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_A354&MI_01:USB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_0BDA&PID_8153:Realtek"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_FF68&PID_FF68:PHIYOUSB3014TB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_A354:USBCompositeDevi"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"askjdfhah"-=1 )

C:\Users\A\Desktop\devcon>for /F "tokens=1-2 delims=#=" %a in ('set #') do (for /L %l in (1 1 %b) do (echo %~a ) )

C:\Users\A\Desktop\devcon>(for /L %l in (1 1 -1) do (echo askjdfhah ) )

C:\Users\A\Desktop\devcon>pause
请按任意键继续. . .
 楼主| 发表于 2023-10-29 15:37:26 | 显示全部楼层
a.txt两个文本还有特殊字符,如下
USB\VID_FF68&PID_FF68:PHIYOUSB3014TB
USB\VID_FF68&PID_FF68:PHIYOUSB3014TB
USB\VID_FF68&PID_FF68:PHIYOUSB3014TB
USB\VID_FF68&PID_FF68:PHIYOUSB3014TB
发表于 2023-10-29 15:51:38 | 显示全部楼层
本帖最后由 hfxiang 于 2023-10-29 17:18 编辑

回复 1# mnokoko

用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )实现方式如下:

  1. gawk "NR==FNR{a[++M]=$0;next}{b[++N]=$0}END{PROCINFO["sorted_in"]="@ind_num_asc";for(i=1;i<=M;i++){out=1;for(j in b){if(a[i]==b[j]){delete b[j];out=0;break}}if(out)print a[i]}}" a.txt b.txt>c.txt
复制代码

评分

参与人数 2技术 +2 收起 理由
mnokoko + 1 这个可行,感谢感谢
77七 + 1 感谢分享

查看全部评分

 楼主| 发表于 2023-10-29 16:42:28 | 显示全部楼层
回复 5# hfxiang
^ syntax error报错
发表于 2023-10-29 17:04:48 | 显示全部楼层
用PowerShell 1行代码就解决了,论坛里搜一下吧,懒得再写了,此类问题已经问过好多次了
发表于 2023-10-29 17:19:09 | 显示全部楼层
回复 6# mnokoko

复制粘贴出错 ,已修正
发表于 2023-10-29 18:00:38 | 显示全部楼层
powershell处理行不
  1. powershell -c "(Compare (GC a.txt) (GC b.txt)).Where({ $_.SideIndicator -eq '<=' }).ForEach({$_.InputObject})"
复制代码

评分

参与人数 1技术 +1 收起 理由
mnokoko + 1 这个可行,感谢感谢

查看全部评分

 楼主| 发表于 2023-10-29 18:49:42 | 显示全部楼层
回复 7# Nsqs
会的不难,难的不会呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 11:57 , Processed in 0.020214 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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