Compara text de dos files y haz algo si son diferentes

Entonces necesito comparar dos files de text y si hay una diferencia en el contenido en uno de ellos, entonces diga el file por lotes a GOTO Diffrence . Sé que el command FC puede verificar las diferencias pero puedo usarlo para hacerlo pasar a un lugar diferente

entonces ejecuto fc %cd%\ActiveVer.txt %cd%\currentver.txt

ActiveVer.txt dice: 0.5.6

y currentver.txt dice: 0.5.7 fc me dice la diferencia.

Pero estoy tratando de ver y hacer que funcione GOTO out-of-date si hay una diferencia y hacer echo You are up to date! si no hay ninguno

  • ¿Debo ejecutar otro command para hacer esto o hay algo que me permita hacer eso con fc?

La mayoría de los commands devuelven un código de error al finalizar. Por convención, cero equivale al éxito y no cero equivale al fracaso (esta es una regla general, hay excepciones). Por lo tanto, la mayor parte de esta respuesta se puede aplicar a cualquier command, siempre que sepa cómo interpretar el código de error devuelto.

El command FC devuelve 0 si los files coinciden, y 1 si hay al less una diferencia. No necesita ver el resultado del command (las diferencias), por lo que puede networkingirigir stdout a nul.

Una opción es usar IF ERRORLEVEL N, que se evalúa como verdadero si el código de error devuelto es> = N.

 fc ActiveVer.txt CurrentVer.txt >nul if errorlevel 1 goto outOfDate echo you are Up-To-Date exit /b :outOfDate echo you are Out-Of-Date exit /b 

Tenga en count que %cd%\file y file son equivalentes, el %cd% no es necesario.

Otra opción es verificar un valor específico usando la "variable" dinámica% ERRORLEVEL%.

 fc ActiveVer.txt CurrentVer.txt >nul if %errorlevel%==1 goto outOfDate echo you are Up-To-Date exit /b :outOfDate echo you are Out-Of-Date exit /b 

Pero casi nunca uso ninguna de las syntax anteriores. En cambio, utilizo los operadores de concatenación de commands condicionales && y || . Los commands después de && solo se ejecutan si el command anterior devolvió cero y los commands después || ejecutar si el command devuelto no es cero. Tenga en count que los commands después de && podrían fallar, lo que podría causar || commands para disparar, incluso si el command original tuvo éxito. Por esta razón, es una buena idea finalizar tus commands && con un command que se garantiza que tendrá éxito. Una buena opción es (call ) , que no hace otra cosa que devolver 0 (éxito).

 someCommand && ( REM Success commands go here REM Make sure the last commmand in this block returns 0 (call ) ) || ( REM Error commands go here ) 

Simplemente quiere GOTO si FC "falla" (encuentra una diferencia), por lo que solo necesita el || .

 fc ActiveVer.txt CurrentVer.txt >nul || goto outOfDate echo You are Up-To-Date exit /b :outOfDate echo You are Out-Of-Date