如何在 Windows shell 脚本中检查两个文件是否相同?

Jas*_*per 2 windows shell-script file-comparison

我正在使用 Windows NT(ish) shell 脚本语言编写一个 shell 脚本。(我的电脑装有 Windows 10。)我想检查两个文本文件是否相同。如果文件相同,我希望我的脚本做一件事。如果文件不相同,我希望我的脚本执行其他操作。脚本不应暂停以要求手动输入更多数据。

“类似问题”列表有关于 Macintosh 和 bash shell 脚本的问题。它还有一个关于运行fccomp从命令行的答案,提供详细的输出。不幸的是,fc不会向 返回结果%errorlevel%,并 comp要求手动输入数据而不是简单地退出。

我有一份 Tim Hill 关于 Windows NT shell 脚本的书。Page 216 有以下代码行, where%D1%%D2%是目录,但我不知道如何修改它以仅处理一对文件:

for /f "tokens=*" %%I in ('fc /b %D1%\*.* %D2%\*.* ^| find /v "Comparing" ^| find /v "FC: no*"') do (set /a ERRORS+=1) & (echo %%I)
Run Code Online (Sandbox Code Playgroud)

小智 8

您可以使用此代码:

fc /b file1 file2 > nul
if errorlevel 1 goto files_differ
[files are the same, do something here]

:files_differ
[files are not the same, do something here]
Run Code Online (Sandbox Code Playgroud)

errorlevel1,如果这些文件是不相同的返回。

errorlevel2手段,该文件的一个缺失。

> nul 用于隐藏命令的输出

或者,您可以使用Busybox for Windows 并检查文件哈希值是否相同。