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.
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?
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.
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.
No PowerShell:
$d1 = get-childitem -path $dir1 -recurse
$d2 = get-childitem -path $dir2 -recurse
compare-object $d1 $d2
Eu costumo usar PathSync
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
FreeCommander faz isso rapidamente. Escolha a pasta à direita, escolha a pasta à esquerda, compare. É um utilitário prático.
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.
-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 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.
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:)
Tags windows