Qual é o equivalente do Windows ao comando diff?


284

Eu sei que existe um post semelhante a este: aqui .
Eu tentei usar o compcomando como mencionado, mas se eu tiver dois arquivos, um com dados como "abcd" e outro com dados "abcde", apenas diz que os arquivos são de tamanhos diferentes. Eu queria saber onde exatamente eles diferem. No Unix, o diff simples me diz qual linha e coluna, o comando comp no Windows funciona se eu tiver algo como "abd" e "abc". Não de outra forma. Alguma idéia do que eu possa usar para isso?

Respostas:


461

Execute isso no arquivo CMD do shell ou lote:

FC file1 file2

FC também pode ser usado para comparar arquivos binários:

FC /B file1 file2

3
Como você faz isso com todos os arquivos alterados em duas pastas? Como, comparo o conteúdo da pasta1 com o conteúdo da pasta2: alguma linha alterada na pasta2 aparece?
— precisa saber é o seguinte

17
@ Wolfpack'08 ": FC path1\* FC path2\*compararia todos os arquivos nas pastas path1e path2, desde que (os arquivos) tivessem nomes idênticos. Se houver arquivos com nomes incompatíveis, o FC reportará um arquivo ausente, mas apenas para os arquivos da primeira pasta que não estão disponíveis. . 't encontrado na segunda pasta e não o contrário para pegar todos os desencontros, provavelmente seria necessária uma técnica diferente.
— Andriy M

@AndriyM Então, novos arquivos causariam erros no FC sem retornar nenhuma linha real? Apenas a mensagem de erro?
— Wolfpack'08

1
@ Wolfpack'08: Sim, apenas a mensagem sobre a contraparte desaparecida, sem linhas da parte existente. (Mas isso não iria encerrar o processamento de outra, já existente, pares de arquivos e sua comparação ainda seria realizado, se é isso que você estava perguntando.)
— Andriy M

@AndriyM Então, você quer dizer: "Se erro: files in both directories are diff'd; files in only one directory throw errors." Interessante. Mas certamente há um programa de terceiros equivalente ao diff?
— precisa

36

Bem, no Windows, eu corro feliz diffe muitas outras ferramentas GNU. Você pode fazer isso com o cygwin , mas eu pessoalmente prefiro o GnuWin32 porque é uma experiência de instalação muito mais leve.

Portanto, minha resposta é que o equivalente do Windows diffnão é outro senão diffele mesmo!


1
A instalação base do Cygwin não parece incluir diff. Quais pacotes adicionais eu preciso instalar para obtê-lo?
— Warren orvalho

7
Eu não recomendo o cygwin. Eu usaria uma porta Win32 nativo de diff
— David Heffernan

1
@WarrenDew O pacote Cygwin que você precisa é diffutils. Veja cygwin.com/cgi-bin2/…
— Steve Pitchers

24

O Winmerge possui um utilitário de linha de comando que pode valer a pena conferir.

Além disso, você também pode usar a parte gráfica, dependendo do que você precisa.


2
Embora esse não seja um utilitário interno do Windows, eu o recomendo - ele é de código aberto, leve e, na minha experiência, livre de erros.
— David.barkhuizen

19

Outra alternativa é baixar e instalar o git a partir daqui . Em seguida, adicione o caminho Git\bin\para sua PATHvariável. Isso fornecerá não apenas diff, mas também muitos outros comandos linux que você pode usar na linha de comando do Windows.

Você pode definir a PATHvariável clicando com o botão direito do mouse em Computador e selecionando Propriedades. Depois, você pode clicar em Configurações avançadas do sistema, no lado esquerdo da tela. No pop-up, clique em Variáveis ​​de ambiente e adicione ou atualize a variável PATH nas suas variáveis ​​de usuário comGit\bin\

Documentação do diff do Git


@firelight - obrigado por sua resposta. Você pode elaborar o que você quer dizer aqui: "Em seguida, adicione o caminho para Git \ bin \ na sua variável PATH."
— BKSpurgeon

2
@BKSpurgeon - Se você clicar com o botão direito do mouse em Computador e selecionar Propriedades, poderá clicar em Configurações avançadas do sistema no lado esquerdo da tela. No pop-up, clique variáveis de ambiente e, em seguida, adicionar ou atualizar a variável PATH em suas variáveis de usuário com bin Git \ \
— Tim Hutchison

@JustinCormack Você tem alguma referência para isso? Eu apenas tentei diff em Git Bash e funcionou
— Tim Hutchison

3
@ Tim Hutchison, da sua resposta: "Isso fornecerá não apenas diff, mas também muitos outros comandos linux que você pode usar na linha de comando do Windows." - quais você quer dizer? Quando alguém instala o Git, ele / ela deve ter apenas git...executáveis ​​disponíveis no PATH. Além disso, a resposta provavelmente deve incluir uma informação importante: você precisa iniciar a ferramenta diff escrevendo git diff, não apenas diff.
— Petr Bodnár 15/09/18

cara, isso é totalmente outrodiff
— vintproykt 17/01

14

O FC funciona muito bem no meu caso, não foi útil, pois eu queria apenas as linhas que foram alteradas. E o FC fornece dados adicionais, como nome de arquivo, mesmas linhas e comparação bilateral.

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

mas, no meu caso, queria apenas as linhas que foram alteradas e queria que essas linhas fossem exportadas para um arquivo diferente, sem nenhum outro cabeçalho ou dados.

Então eu usei "findstr" para comparar o arquivo:

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

Onde :

data.txt.bak é o nome do arquivo antigo

data.txt é o nome do novo arquivo

DiffResult.txt contém os dados que são alterados, ou seja, apenas uma linha #### 09


1
/ Uma única primeira linha e da última linha de bloco que é alterado / N números mostram linha
— Lukas

10

fc. fc é melhor para lidar com arquivos grandes (> 4 GBytes) do que o diff do Cygwin.


10

Há também o Powershell (que faz parte do Windows). Não é rápido, mas é flexível, eis o comando básico. As pessoas criaram vários cmdlets e scripts para isso, se você precisar de uma formatação melhor.

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

Não faz parte do Windows, mas se você é desenvolvedor do Visual Studio, ele vem com o WinDiff (gráfico)

Mas o meu favorito é o BeyondCompare, que custa US $ 30.


4

DiffUtils é provavelmente a sua melhor aposta. É o equivalente do Windows ao diff.

Que eu saiba, não há equivalentes embutidos.


No entanto, também usei isso hoje. Descobri que a versão bastante antiga 2.8.7 fornecida nessa página tem um bug (ao comparar determinados arquivos PDF, eles são relatados como iguais). Então agora preferindo o "git diff" como sugerido pela luz do fogo.
— anre 27/10/16

4

A razão pela qual você obteve o erro com o COMP é que o utilitário assume que os arquivos que você está comparando são do mesmo tamanho. Para superar isso, você pode usar a '/n'opção com a qual pode especificar o número de linhas que deseja comparar. (veja as opções suportadas pelo comp digitando 'comp /?'na linha de comando. para que seu comando se pareça com:

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

Isso deve resolver seu problema se você quiser usar o COMP. Mas isso será um problema para arquivos muito grandes.

Embora compseja uma opção, mas eu acho que é primitivo e FCé uma opção melhor. você pode usar FORFILESe, FCjuntos, provavelmente fazer um utilitário de comparação de arquivos realmente bom, se precisar de um com frequência.

FC é usado desta maneira para ref:

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

existem muitas opções disponíveis que você pode ver na 'fc /?' esperança de que isso ajude




0

Não sei se a ferramenta a seguir é exatamente o que você precisa. Mas eu gosto de usar, para arquivos específicos, alguma ferramenta online. Dessa forma, eu posso usá-lo independentemente do sistema operacional. Aqui está um exemplo: diffchecker.com

Mas, para as minhas necessidades, acho que a melhor ferramenta para rastrear alterações e logs dos arquivos do meu projeto é o GIT. Se você trabalha em equipe, pode ter alguns repositórios on-line em um servidor seu ou usá-lo com o Bitbucket ou o Github.

Espero que ajude alguém.


0

Se você instalou o git em sua máquina, poderá abrir um terminal git e apenas usar o diffcomando Linux normalmente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.