Come sopprimere l'output con fc quando non ci sono differenze


3

Voglio confrontare un mucchio di file in un file batch cmd.exe utilizzando fc. Sfortunatamente, fcriporta per ogni coppia di file confrontati che non ha trovato differenze se non ci sono differenze. Come posso modificare quel comportamento in modo che rimanga silenzioso quando non ci sono differenze e segnala solo se un file è effettivamente diverso?

Risposte:


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%

correre 2.cmd

Rusult:

  • Test1, ErrorLevel: 0 / FC: nessuna differenza riscontrata
  • Test2, ErrorLevel: 1 / file diversi
  • Test3, ErrorLevel: 2 / Impossibile trovare almeno uno dei file
  • Test4, ErrorLevel: -1 / Sintassi non valida

5.cmd:

@ECHO OFF
CLS
fc /b %1 %2

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

<- fai quello che ti serve ... ->

)

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

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

If "%ERRORLEVEL%"=="-1" (
@ECHO Echo Invalid syntax
)

Questo stampa ancora qualcosa se non ci sono differenze.
René Nyffenegger,

1

Può essere ottenuto usando il ||costrutto che esegue il comando sul lato destro solo se lo stato di uscita del comando sul lato sinistro è 0. Poiché lo fcstato di uscita è 0 se non ha trovato differenze, il catcomando non sarà correre.

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

Se utilizzato in un file batch, a @dovrebbe essere anteposto in modo che la riga desiderata non venga ripetuta:

@fc %1 %2 > c:\temp\fc.out || cat c:\temp\fc.out
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.