Como faço para suprimir a saída com fc quando não há diferenças

3

Eu quero comparar um monte de arquivos em um arquivo de lote cmd.exe usando fc . Infelizmente, fc relata para cada par de arquivos comparados que não encontrou diferenças se não houver diferenças. Como posso alterar esse comportamento para que ele permaneça em silêncio quando não houver diferenças e apenas relatórios se um arquivo for realmente diferente?

    
por René Nyffenegger 09.01.2015 / 08:51

2 respostas

1

Isso pode ser conseguido usando a construção || que só executa o comando no lado direito se o status de saída do comando no lado esquerdo for 0. Como o status de saída de fc é 0 se ele for encontrado sem diferenças, o comando cat não será executado.

fc file1.xyz file2.xyz > c:\temp\fc.out || cat c:\temp\fc.out

Se usado em um arquivo de lote, um @ deve ser prefixado para que a linha inserida não seja exibida:

@fc %1 %2 > c:\temp\fc.out || cat c:\temp\fc.out
    
por 24.10.2015 / 08:31
1

1.cmd:

fc /b 1.cmd 1.cmd

2.cmd:

@ECHO OFF
CLS
fc /b 1.cmd 1.cmd
ECHO .
ECHO Test1, ErrorLevel: %ERRORLEVEL%

fc 1.cmd 2.cmd
ECHO Test2, ErrorLevel: %ERRORLEVEL%
fc /b 1.cmd 3.cmd
ECHO Test3, ErrorLevel: %ERRORLEVEL%
ECHO .
fc /cb
ECHO Test4, ErrorLevel: %ERRORLEVEL%

execute 2.cmd

Rusult:

  • Test1, ErrorLevel: 0 / FC: nenhuma diferença encontrada
  • Test2, ErrorLevel: 1 / arquivos diferentes
  • Test3, ErrorLevel: 2 / Não é possível encontrar pelo menos um dos arquivos
  • Test4, ErrorLevel: -1 / Sintaxe inválida

5.cmd:

@ECHO OFF
CLS
fc /b %1 %2

If "%ERRORLEVEL%"=="1" (
@ECHO diff!

< - faça o que você precisa ... - >

)

If "%ERRORLEVEL%"=="0" (
@ECHO No diff!
)

If "%ERRORLEVEL%"=="2" (
@ECHO Echo File not found
)

If "%ERRORLEVEL%"=="-1" (
@ECHO Echo Invalid syntax
)
    
por 09.01.2015 / 09:26