批处理文件使用DIFF和FINDSTR比较和输出2个文件之间的差异

时间:2014-06-03 12:53:43

标签: batch-file diff findstr

我正在尝试比较两个文件(old.txt和new.txt),如果new.txt中的任何行与old.txt不同,则输出到txt文件。我不希望新文件中出现old.txt中的任何行。

新文件上传到c:\ temp \ download,一旦处理完毕,将被复制到c:\ temp \ download \ archived。

我在下面使用的脚本将在c:\ temp \ download中找到最新文件,并将其与c:\ temp \ download \ archived中的最后一个修改文件进行比较,并将差异输出到txt文件。它适用于大多数情况,但我面临的问题是输出(%latestD%)文件还包含来自old.txt的行。它应该是单向比较,新旧比较,输出应该包含来自old.txt的行。

以下是我要实现的目标:

OLD.txt
吉姆789
简123 詹姆斯999
莉莉111

NEW.txt
吉姆123
简123 詹姆斯123

output.txt的
吉姆123
詹姆斯123

set "fC=C:\temp\download"
set "latestC="
for /f "delims=" %%a in ('dir "%fC%" /b /od /a-d /tw 2^>nul') do set "latest=%%a" & set   "latestC=%fC%\%%a"
set "fD=C:\temp\download\archived
set "latestD="
for /f "delims=" %%a in ('dir "%fD%" /b /od /a-d /tw 2^>nul') do set "latestD=%fD%\%%a"
if not defined latestC ( echo NO File in C & exit /b )
if not defined latestD ( echo NO File in D & exit /b )
for /f "tokens=1,*" %%a in (
'diff "%latestC%" "%latestD%" ^| findstr /r /c:"^<" /c:"^>"'
) do (
>> "C:\temp\%latest%" echo(%%b
)

谢谢!

1 个答案:

答案 0 :(得分:0)

这应该按照你的要求行事:

findstr /v /g:"old.txt" "new.txt"