web-dev-qa-db-ja.com

Windowsシェルスクリプト内で2つのファイルが同一であるかどうかを確認するにはどうすればよいですか?

Windows NT(ish)シェルスクリプト言語を使用してシェルスクリプトを書いています。 (私のコンピューターにはWindows 10が搭載されています。)2つのテキストファイルが同一であるかどうかを確認したいと思います。ファイルが同一である場合、スクリプトに1つのことを実行させます。ファイルが同一でない場合は、スクリプトで別のことを実行してください。スクリプトは、追加のデータの手動入力を要求するために一時停止しないでください。

「類似の質問」リストには、Macintoshおよびbashシェルスクリプトに関する質問があります。また、コマンドラインからfcまたはcompを実行することについての回答もあり、詳細な出力を提供します。残念ながら、 fcは結果を%errorlevel%に返しません、そしてcompは、単に終了するのではなく、手動でデータを入力するように要求します。

Windows NTShellスクリプトに関するTimHillの本のコピーを持っています。 216ページには次のコード行があります。%D1%%D2%はディレクトリですが、1組のファイルだけで機能するように変更する方法がわかりません。

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

次のコードを使用できます。

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]

errorlevel of 1は、ファイルが同一でない場合に返されます。

errorlevel of 2は、ファイルの1つが欠落していることを意味します。

> nulは、コマンドの出力を非表示にするために使用されます

または、Windowsの場合は Busybox を使用して、ファイルハッシュが同じかどうかを確認することもできます。

7
rahulatschool