Confronta le directory su Windows


6

Sto manipolando un sacco di file e inserendoli in una directory diversa. Quello che devo fare ora è scoprire quali file si trovano nella directory originale che non si trovano nella directory di output (il problema viene elaborato da una dozzina di computer). C'è qualche script che posso eseguire su Windows che visualizzerà questo?

Risposte:


8

Usa WinDiff . Viene fornito con Visual Studio e Platform SDK e può essere scaricato separatamente . È principalmente per confrontare i file, ma consente anche di confrontare ricorsivamente le cartelle.


2

In PowerShell:

$d1 = get-childitem -path $dir1 -recurse 
$d2 = get-childitem -path $dir2 -recurse 
compare-object $d1 $d2 

L'ho fatto tra una directory sulla mia scheda USB e il mio computer locale. 10 minuti dopo, ancora in attesa ...
jcollum,

Nota che questo metodo non può vedere affatto i file nascosti o del sistema operativo (ad esempio desktop.ini), anche se li hai visualizzati in Explorer, e si romperà completamente se una delle directory di confronto è vuota per qualche motivo
Hashbrown,

1

Se stai cercando un processo manuale e hai installato Visual Studio, puoi usare windiff.exe per mostrare le differenze.



0

puoi provare questo vbscript, non è necessario scaricare alcun materiale.

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

produzione

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

0

FreeCommander lo fa rapidamente. Seleziona la cartella a destra, seleziona la cartella a sinistra, confronta. È un'utilità pratica.


0

In Cygwin

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

Il comando comm fornisce tre colonne di output a meno che non vengano eliminate.

Ho usato -Scosì meno non si avvolge e puoi vedere chiaramente le colonne.

opzioni

  • -23 mostra ciò che è unico per $ dir1 nella prima colonna, elimina le altre due colonne
  • -13 mostra ciò che è unico per $ dir2 nella seconda colonna, elimina le altre due colonne
  • -12 mostra tutto allo stesso modo tra $ dir1 e $ dir2, sopprime le prime due colonne

genere

fper solo i file dper la sola directory o utilizzare il tipo due volte con entrambi o rimuovere del tutto il tipo per tutto.

In CMD

Nota non ho testato quanto sotto presumo che il tubo funzioni in CMD.

Se hai trovato findutils e coreutils da qui http://gnuwin32.sourceforge.net/packages.html (perché non vuoi cygwin) e il pacchetto meno (ma puoi usare > \somepath\fileinvece di |less -S allora notepad fileecc.).

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

Nota sostituisci $ ... e # ... # con i percorsi se non sai come creare variabili :)


Sarebbe bello avere qualcosa che paragona molte directory e poi dia quello che i DIR hanno più in comune e ciò che non hanno tra i molti (ovviamente potresti fare alcuni trucchi bash con quanto sopra). Proverà WinDiff
sabgenton il

Non so se sono solo io, ma PS è compare-object $d1 $d2 stato lento per me.
Sabgenton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.