Compare diretórios no Windows

5

Estou manipulando um monte de arquivos e colocando-os em um diretório diferente. O que eu preciso fazer agora é descobrir quais arquivos estão no diretório original que não estão no diretório de saída (o problema está sendo processado por uma dúzia de computadores). Existe algum script que eu possa rodar no Windows que mostre isso?

    
por Chris Latta 29.01.2010 / 04:35

7 respostas

8

Use o WinDiff . Ele vem com o Visual Studio e o Platform SDK e pode ser baixado separadamente . É principalmente para comparar arquivos, mas também permite recursivamente comparar pastas.

    
por 29.01.2010 / 04:41
1

Se você estiver procurando por um processo manual e tiver visual studio instalado, então você pode usar o windiff.exe para mostrar as diferenças.

    
por 29.01.2010 / 04:40
1

No PowerShell:

$d1 = get-childitem -path $dir1 -recurse 
$d2 = get-childitem -path $dir2 -recurse 
compare-object $d1 $d2 
    
por 29.01.2010 / 04:42
1

Eu costumo usar PathSync

    
por 29.01.2010 / 05:05
0

você pode experimentar este vbscript, não é necessário fazer download de nenhum material.

Set objFS = CreateObject("Scripting.FileSystemObject")
Set d = CreateObject("Scripting.Dictionary")
Set objArgs = WScript.Arguments
strFolderA= objArgs(0)
strFolderB = objArgs(1)
Set objFolder = objFS.GetFolder(strFolderA)
Set objFolder1 = objFS.GetFolder(strFolderB)
For Each strFile In objFolder.Files
    strFileName = strFile.Name
    strFilePath = strFile.Path
    'collect all files and their full paths.
    d.Add strFileName, strFilePath
Next

For Each strFile In objFolder1.Files
    strFileName = strFile.Name
    strFilePath = strFile.Path
    If Not d.Exists(strFileName) Then
        WScript.Echo "Not found in : " & strFolderA & "->" & strFilePath
    End If 
Next

saída

C:\test>dir /B c:\tmp
file
test.bat

C:\test>dir /B c:\tmp1
test.bat

C:\test>cscript //nologo test.vbs c:\tmp1 c:\tmp
Not found in : c:\tmp1->C:\tmp\file
    
por 29.01.2010 / 05:02
0

FreeCommander faz isso rapidamente. Escolha a pasta à direita, escolha a pasta à esquerda, compare. É um utilitário prático.

    
por 05.06.2011 / 19:42
0

No cygwin

comm <options> <(cd $dir1;find -type <type>|sort)  <(cd $dir2;find -type <type>|sort) |less -S

O comando comm fornece três colunas de saída, a menos que você as suprima.

Eu usei -S para que menos não seja quebrado e você pode ver as colunas claramente.

opções

  • -23 mostra o que é exclusivo de $ dir1 na primeira coluna, suprime outras duas colunas
  • -13 mostra o que é exclusivo de $ dir2 na segunda coluna, suprime outras duas colunas
  • -12 mostra cada coisa igual entre $ dir1 e $ dir2, suprime as duas primeiras colunas

tipo

f para apenas arquivos d apenas para o diretório ou use o tipo duas vezes com ambos ou remova o tipo completamente para tudo.

no CMD

Nota não testei o abaixo Eu suponho que o pipe funciona no CMD.

Se você encontrou findutils e coreutils aqui link (porque você não quer o cygwin) e menos pacote ( mas você pode usar > \somepath\file em vez de |less -S então notepad file etc).

cd %dir1%
find -type <type> | sort > \somepath\file1
cd %dir2%
find -type <type> | sort > \somepath\file2
comm <options> file1 file2 |less -S

Note que substitua $ ... e # ... # pelos caminhos se você não souber como fazer variáveis:)

    
por 21.01.2013 / 08:11

Tags