如何批量比较两个文件中的文本行

时间:2018-07-20 15:47:19

标签: batch-file for-loop

那是我的2个txt文件formatliste_droid.txt和formatliste_siegfried.txt的相同内容。我想知道直到定界符$:$的所有行都是相同的1-1、2-2,依此类推。

Z:\15_Testdateien\jhove_Script_fuer_MIX-Verzeichnisse\testfiles\BVBBV042064787\Files\E\images.jpg$;$fmt/43
Z:\15_Testdateien\jhove_Script_fuer_MIX-Verzeichnisse\testfiles\BVBBV042064787\Files\E\Van Schijndel House - English.mp4$;$fmt/199
Z:\15_Testdateien\jhove_Script_fuer_MIX-Verzeichnisse\testfiles\BVBBV042064787\Files\E\Van Schijndelhuis - Nederlands.mp4$;$fmt/199

那是我的代码:

@echo off
Setlocal EnableDelayedExpansion 
for /f "tokens=1 delims=$;$" %%a in (formatliste_siegfried.txt) do ( 
for /f "tokens=1 delims=$;$" %%c in (formatliste_droid.txt) do (                                      
if /i  %%a==%%c (
echo  match
pause
)

)
)

问题是,即使适当的行不相同,我也总是会匹配

1 个答案:

答案 0 :(得分:0)

TL; DR-

使用fc.exe命令。

详细信息-

此逻辑存在一些问题,使您无法获取所需的输出。您只获得输出“匹配”的原因是因为这是唯一可能的输出-只有一行“回声”。添加案例else将输出一行不匹配的次数。

那就是说,添加else太嘈杂了,以至于没有价值,因为绝大多数输出​​都是“不匹配”的。这里的逻辑说:“对于文件1的每一行,检查文件2的每一行以检查是否匹配”。例如:给定2个文件,每个文件有100行,即使每行在另一个文件中都有匹配项,对于100个外部循环中的每个循环,输出将为1个“匹配”和99个“不匹配”。我假设您不希望100个“匹配”和9900个“不匹配”。

因此,仍然考虑问题是“如何比较两个文件中的文本行”,我建议使用FC.exe命令。无论是批处理命令行还是普通命令行,它都旨在比较文件。

其他要考虑的项目:

  • 在包含空格的比较项周围缺少双引号

    %%a==%%c ...应该是... "%%a"=="%%c"
  • “ delims =”几乎可以匹配任何单个字符,但不能匹配连续的多字符组

  • 由于不需要动态使用“ set”,因此不需要“ Setlocal EnableDelayedExpansion”
  • 如果大小写很重要,则使用“ if / i”将破坏支票的完整性