【问题标题】:How to compare the text lines from two files in batch如何批量比较两个文件中的文本行
【发布时间】:2018-12-28 23:32:11
【问题描述】:

这是我的 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
)

)
)

问题是即使相应的行不相同,我也总是得到匹配

【问题讨论】:

  • 分隔符肯定是分号 ; 或至少是序列 $;$。但是,当使用 Delims 时,您应该,在这种情况下只需要 "Delims=$"
  • first:delims 是单字符分隔符。 delims=$;$ 在每个 $ 和每个 ; 处定界。第二:将“Siegfried”的每一行droid每一行进行比较。这是你的意图吗?或者你想将“Siegfried”的每一行与“droid”的对应行(相同的行号)进行比较? (为了调试你应该使用echo match: %%a # %%c
  • 我建议你只使用%%aFind,即Do Find /I "%%a$;$"<"formatliste_droid.txt">Nul&&(Echo [match] %%a)||Echo [unique] %%a
  • @Stephan 我想将 Siegfired 的每一行与 Droid 的相应行进行比较。如果我将分隔符限制为仅 1 个符号,我也会遇到同样的问题

标签: batch-file for-loop


【解决方案1】:

TL;DR -

使用fc.exe 命令。

详情-

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

也就是说,添加else 会太嘈杂而没有价值,因为大部分输出将是“不匹配”。这里的逻辑是“对于文件 1 的每一行,检查文件 2 的每一行以检查匹配”。例如:给定 2 个文件,每个文件有 100 行,即使每一行在另一个文件中有匹配项,对于 100 个外部循环中的每一个,输出将是 1 个“匹配”和 99 个“不匹配”。我假设您不想要 100 个“匹配”和 9900 个“不匹配”。

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

其他考虑事项:

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

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

  • “Setlocal EnableDelayedExpansion”不是必需的,因为“set”没有动态使用
  • 如果大小写很重要,使用“if /i”会破坏检查的完整性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多