Como verificar se dois arquivos são idênticos, dentro de um script de shell do Windows?

2

Estou escrevendo um script de shell usando a linguagem de script de shell do Windows NT (ish). (Meu computador tem o Windows 10.) Eu quero verificar se dois arquivos de texto são idênticos. Se os arquivos forem idênticos, quero que meu script faça uma coisa. Se os arquivos não forem idênticos, quero que meu script faça outra coisa. O script não deve pausar para solicitar a inserção manual de mais dados.

A lista "Perguntas similares" tem perguntas sobre scripts de shell do Macintosh e do bash. Ele também tem uma resposta sobre a execução de fc ou comp na linha de comando, que fornece uma saída detalhada. Infelizmente, fc não retorna um resultado para %errorlevel% e comp solicita entrada manual de dados em vez de simplesmente sair.

Eu tenho uma cópia do livro de Tim Hill no shell script do Windows NT. Página 216 tem a seguinte linha de código, onde %D1% e %D2% são diretórios, mas eu não sei como modificá-lo para trabalhar em apenas um único par de arquivos:

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

1 resposta

6

Você pode usar este código:

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]

Um errorlevel de 1 é retornado se os arquivos NÃO forem idênticos.

Um errorlevel de 2 significa que um dos arquivos está faltando.

> nul é usado para ocultar a saída do comando

Alternativamente, você pode usar o Busybox para Windows e verificar se os hashes do arquivo são os mesmos.

    
por 07.07.2017 / 05:16