¿Cuál es el equivalente de Windows del comando diff?


Sé que hay un post similar a este : aquí.
Intenté usar el comando comp como se mencionó, pero si tengo dos archivos, uno con datos como "abcd" y el otro con datos "abcde", solo dice que los archivos son de diferentes tamaños. Quería saber exactamente dónde difieren. En Unix, el simple diff me dice qué fila y columna, el comando comp en Windows funciona si tengo algo como "abd" y "abc". No de otra manera. ¿Alguna idea de qué puedo usar para esto?

Author: Community, 2011-07-29

13 answers

Ejecute esto en el shell CMD o en el archivo batch:

FC file1 file2

FC también se puede utilizar para comparar archivos binarios:

FC /B file1 file2
 383
Author: Andriy M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-20 10:35:24

Bueno, en Windows corro felizmente diff y muchas otras herramientas de GNU. Puedes hacerlo con cygwin , pero personalmente prefiero GnuWin32 porque es una experiencia de instalación mucho más ligera.

Entonces, mi respuesta es que el equivalente de Windows de diff, no es otro que diff en sí mismo!

 25
Author: David Heffernan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-29 18:23:12

Winmerge tiene una utilidad de línea de comandos que podría valer la pena revisar.

También puede usar la parte gráfica de la misma dependiendo de lo que necesite.

 20
Author: Robert Greiner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-29 18:14:22

Otra alternativa es descargar e instalar git desde aquí. Luego, agregue la ruta a Git\bin\ a su variable PATH. Esto le dará no solo diff, sino también muchos otros comandos de Linux que puede usar desde la línea de comandos de Windows.

Puede establecer la variable PATH haciendo clic derecho en el equipo y seleccionando Propiedades. A continuación, puede hacer clic en Configuración avanzada del sistema en el lado izquierdo de la pantalla. En la ventana emergente, haga clic en Variables de entorno y, a continuación, agregar o actualice la variable PATH en sus variables de usuario con Git\bin\

Documentación de Git diff

 14
Author: Tim Hutchison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-29 17:30:01

Fc. fc es mejor manejando archivos grandes( > 4 GBytes) que el diff de Cygwin.

 8
Author: nerdfever.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-26 19:01:05

FC funciona muy bien por en mi caso no fue útil ya que quería solo las líneas que se cambian. Y FC dan datos adicionales como el nombre del archivo, las mismas líneas y la comparación bilateral.

    >fc data.txt data.txt.bak   
    ***** DATA.TXT
    ####09
    ####09
    ####09
    ***** DATA.TXT.BAK
    ####09
    ####08
    ####09

Pero en mi caso quería solo las líneas que han cambiado y quería que esas líneas se exportaran a un archivo diferente, sin ningún otro encabezado o datos.

Así que usé "findstr" para comparar el archivo:

findstr /V /G:data.txt.bak data.txt >DiffResult.txt

Donde:

data.txt.bak es el nombre del archivo antiguo

data.txt es el nombre del nuevo archivo

DiffResult.txt contiene los datos que se cambian, es decir, una sola línea ## # # 09

 8
Author: Nimish Choudhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-01 19:51:42

También está Powershell (que es parte de Windows). No es rápido, pero es flexible, aquí está el comando básico. Las personas han escrito varios cmdlets y scripts para él si necesita un mejor formato.

PS C:\Users\Troll> Compare-Object (gc $file1) (gc $file2)

No es parte de Windows, pero si eres un desarrollador con Visual Studio, viene con WinDiff (gráfico)

Pero mi favorito personal es BeyondCompare, que cuesta 3 30.

 7
Author: Paul Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-18 02:21:13

DiffUtils es probablemente su mejor apuesta. Es el equivalente de Windows de diff.

Que yo sepa no hay equivalentes incorporados.

 4
Author: mattkelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-29 18:18:33

La razón por la que obtiene el error con COMP es que la utilidad asume que los archivos que está comparando son del mismo tamaño. Para superar eso puede usar la opción th '/n' con la que puede especificar el número de líneas que desea comparar. (vea las opciones soportadas por comp escribiendo 'comp /?' en la línea de comandos. así que su orden se vería como :

C:\>comp "filepath1" "filepath2" /a /l /n=(the number of lines you want to compare) /c 

Esto debería resolver tu problema si quieres seguir usando COMP. Pero esto será un problema para muy grandes file.

Aunque comp es una opción, pero siento que es primitiva y FC es una mejor opción. puede usar FORFILES y FC juntos para probablemente hacer una muy buena utilidad filecompare si necesita una con frecuencia.

FC se usa de esta manera para ref:

C:\>fc /c(case insensistive) /lbn(number of errors allowed before you wanna stop compare) /n(display line number) "filename1" "filename2"

Hay muchas opciones disponibles que se pueden ver por 'fc /?' espero que esto ayude

 2
Author: proximace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-30 06:04:48

He encontrado un software gráfico ligero para Windows que parece ser útil en la falta de diff comando. Podría resolver todos mis problemas.

WinDiff http://www.grigsoft.com/download-windiff.htm

 2
Author: Ahmad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-27 20:51:03

El equivalente de windows al comando diff es el comando fc (File Comapre).

Estos son los pasos básicos para hacerlo:
1. Mantenga los dos archivos en una carpeta (Ejemplo file1.html y file2.html)
2. Iniciar símbolo del sistema
3. Type fc file1Location file2Location

Han encontrado un tutorial detallado sobre el mismo:

Http://www.howtogeek.com/206123/how-to-use-fc-file-compare-from-the-windows-command-prompt/

 0
Author: Vishal Kotak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-16 14:41:32

No se si la siguiente herramienta es exatly lo que necesita. Pero me gusta usar, para archivos específicos, alguna herramienta en línea. De esta manera puedo usarlo independientemente del sistema operativo. He aquí un ejemplo: diffchecker.com

Pero para mis necesidades, supongo que la mejor herramienta para rastrear cambios y registros de los archivos de mi proyecto es GIT. Si trabajas en equipo, puedes tener algún repositorio en línea en un servidor tuyo, o usarlo con Bitbucket o Github.

Espero que ayude a alguien.
 0
Author: Pedro Acácio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-31 17:51:28

Si ha instalado git en su máquina, puede abrir un terminal git y simplemente usar el comando Linux diff como de costumbre.

 0
Author: falsePockets,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-20 07:48:36