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


284

Sé que hay una publicación similar a esta: aquí .
Intenté usar el compcomando como se menciona, 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 en qué se diferencian. En Unix, la diferencia simple me dice qué fila y columna, el comando comp en Windows funciona si tengo algo como "abd" y "abc". De otro modo no. ¿Alguna idea de lo que puedo usar para esto?

Respuestas:


461

Ejecute esto en el shell de CMD o el archivo por lotes:

FC file1 file2

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

FC /B file1 file2

3
¿Cómo se hace esto con todos los archivos modificados en dos carpetas? Como, comparo el contenido de la carpeta1 con el contenido de la carpeta2: ¿aparecen líneas cambiadas en la carpeta2?
Wolfpack'08

17
@ Wolfpack'08 ": FC path1\* FC path2\*compararía todos los archivos en las carpetas path1y path2, siempre que (los archivos) tengan nombres idénticos. Si hay archivos con nombres que no coinciden, FC informará que falta un archivo, pero solo para los archivos de la primera carpeta que no están no se encuentra en la segunda carpeta y no al revés. Para detectar todos los desajustes, probablemente sea necesaria una técnica diferente.
Andriy M

@AndriyM Entonces, ¿los archivos nuevos provocarían que FC se produjera un error sin devolver ninguna línea real? Sólo el mensaje de error?
Wolfpack'08

1
@ Wolfpack'08: Sí, solo el mensaje sobre la contraparte faltante, sin líneas de la parte existente. (Pero eso no terminaría el procesamiento de otros pares de archivos existentes, y su comparación aún se llevaría a cabo, si eso es lo que estaba preguntando.)
Andriy M

@AndriyM Entonces, quieres decir: "Si error: files in both directories are diff'd; files in only one directory throw errors." Interesante. ¿Pero seguramente hay un programa de terceros equivalente a diff?
Wolfpack'08

36

Bueno, en Windows ejecuto felizmente diffy muchas otras herramientas de GNU. Puede 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 diffno es otro que él diffmismo.


1
La instalación base de Cygwin no parece incluir diff. ¿Qué paquetes adicionales necesito instalar para obtenerlo?
Warren Dew

77
No recomiendo cygwin. Yo usaría un puerto Win32 nativo de diff
David Heffernan el

1
@WarrenDew El paquete Cygwin que necesitas es diffutils. Ver cygwin.com/cgi-bin2/…
Steve Pitchers

24

Winmerge tiene una utilidad de línea de comandos que vale la pena echarle un vistazo.

Además, también puede usar la parte gráfica, según lo que necesite.


2
Aunque esta no es una utilidad integrada de Windows, la recomiendo encarecidamente: es de código abierto, liviana y, en mi experiencia, está libre de errores.
david.barkhuizen

19

Otra alternativa es descargar e instalar git desde aquí . Luego, agregue la ruta Git\bin\a su PATHvariable. 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 PATHvariable haciendo clic derecho en Computadora y seleccionando Propiedades. Luego 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 luego agregue o actualice la variable PATH en sus variables de usuario conGit\bin\

Documentación de Git diff


@firelight: gracias por tu respuesta. ¿Puede explicar qué quiere decir aquí: "Luego, agregue la ruta a Git \ bin \ a su variable PATH".
BKSpurgeon

2
@BKSpurgeon: si hace clic con el botón derecho en Computadora y selecciona Propiedades, 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 luego agregue o actualice la variable PATH en sus variables de usuario con Git \ bin \
Tim Hutchison

@JustinCormack ¿Tiene alguna referencia para esto? Acabo de probar diff en Git Bash y funcionó
Tim Hutchison

3
@Tim Hutchison, a partir de su respuesta: "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". - a que te refieres? Cuando uno instala Git, él / ella debe tener solo git...ejecutables disponibles desde PATH. Además, la respuesta probablemente debería incluir una información importante: que necesita lanzar la herramienta diff escribiendo git diff, no solo diff.
Petr Bodnár

amigo, eso es totalmente otrodiff
vintproykt

14

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

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

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

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

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

dónde :

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, solo una línea #### 09


1
/ Solo se modifica la primera línea y la última línea del bloque / N muestra los números de línea
Lukas

10

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


10

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

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

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

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


4

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

Que yo sepa, no hay equivalentes incorporados.


También lo usé, sin embargo, hoy descubrí que la versión 2.8.7 bastante antigua que se proporciona en esa página tiene un error (al comparar ciertos archivos PDF se informan como iguales). Así que ahora prefiero el "git diff" como lo sugiere firelight.
anre

4

La razón por la que obtiene el error con COMP es porque la utilidad supone que los archivos que está comparando son del mismo tamaño. Para superar esto, puede usar la '/n'opción con la que puede especificar el número de líneas que desea comparar. (consulte las opciones admitidas por comp escribiendo 'comp /?'en la línea de comando. Para que su comando se vea así:

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

Esto debería resolver su problema si quiere seguir usando COMP. Pero esto será un problema para archivos realmente grandes.

Aunque compes una opción, pero siento que es primitiva y FCes una mejor opción. puede usar FORFILESy FCjuntos para hacer una utilidad de comparación de archivos realmente buena si la necesita con frecuencia.

FC se usa de esta manera para la referencia:

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 puedes ver con la 'fc /?' esperanza de que esto ayude




0

No sé si la siguiente herramienta es exactamente 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. Aquí hay un ejemplo: diffchecker.com

Pero para mis necesidades, creo que la mejor herramienta para rastrear cambios y registros de los archivos de mi proyecto es GIT. Si trabaja en un equipo, puede tener un repositorio en línea en un servidor suyo o usarlo con Bitbucket o Github.

Espero que ayude a alguien.


0

Si ha instalado git en su máquina, puede abrir un terminal git y simplemente usar el diffcomando Linux de manera normal.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.