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

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

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

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

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

自己写的仅能列出一行PHIYOUSB3014TB,而不是两行PHIYOUSB3014TB

  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
复制代码

如果文本如样本一样简单短小,试试这样
bat小白,请多指教!谢谢!

TOP

本帖最后由 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
请按任意键继续. . .

TOP

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

TOP

本帖最后由 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

评分人数

    • mnokoko: 这个可行,感谢感谢技术 + 1
    • 77七: 感谢分享技术 + 1

TOP

回复 5# hfxiang
^ syntax error报错

TOP

用PowerShell 1行代码就解决了,论坛里搜一下吧,懒得再写了,此类问题已经问过好多次了

TOP

回复 6# mnokoko

复制粘贴出错 ,已修正

TOP

powershell处理行不
  1. powershell -c "(Compare (GC a.txt) (GC b.txt)).Where({ $_.SideIndicator -eq '<=' }).ForEach({$_.InputObject})"
复制代码
1

评分人数

    • mnokoko: 这个可行,感谢感谢技术 + 1

TOP

回复 7# Nsqs
会的不难,难的不会呀

TOP

返回列表