2010-11-22 1 views
2

Ich habe 2 Verzeichnisse, Ordner1 mit einer Liste von Dateien und Ordner2 mit der gleichen Datei-Liste, aber mit mehr Dateien. Ich muss Ordner 2 "andere Dateien"
erhalten Gibt es etwas wie Dateivergleich (fc) für Verzeichnisse, um die Unterschiede zurückzugeben?Batch-Datei, um 2 Verzeichnisse zu vergleichen und Namen von Dateien zu erhalten, die unterschiedlich sind [dos]

BEARBEITEN Ich erstelle derzeit 2 Listen mit dir und dann eine Datei vergleichen. Jetzt muss ich nur die Ausgabe des fc analysieren, um nur die Dateinamen zu enthalten.

fc /a "C:\whatever\text1.txt" "C:\whatever\text2.txt" >> "C:\whatever\differences.txt" 
+0

Ich weiß nichts (kostenlos) und Googling brachte nicht viel, aber Sie könnten immer Ihre eigene Konsole App mit C#, JAVA, was auch immer schreiben, und rufen Sie es aus Ihrem Batch-Programm. Das würde ich wahrscheinlich tun. – dcp

+0

Ja, ich weiß, ich könnte es in C machen, aber ich habe schon ein paar Batch-Sachen geschrieben, ich habe nur versucht, eine schnelle Lösung zu finden. –

+0

Ich habe eine in Batch-Sprache (siehe Antwort) Ich habe vergessen zu sagen, es heißt * dirc.bat * Ich frage mich, haben Sie nicht VBScript oder JScript zur Verfügung, da Sie die [Windows] (http: //en.wikipedia .org/wiki/Windows_Script_Host # Versionsgeschichte) – frayser

Antwort

2

Zuerst tun Sie eine dir /s auf beiden Ordnern. Verwenden Sie dann fc /a, um die Ergebnisse zu vergleichen.

Für etwas Besseres als das (abhängig von Ihren Bedürfnissen) benötigen Sie ein spezielles Werkzeug. Zum Beispiel werfen Sie einen Blick auf Windiff oder WinMerge.

+0

Idneed, es gibt nichts Brauchbares für diese in Windows integriert. Wenn Sie ein interaktives GUI-Programm verwenden können, gibt es viele, aber ich liebe die hoch konfigurierbare Funktion "Synchronize dirs" von Total Commander. Wenn es in der Befehlszeile ausgeführt werden muss, verwende ich cwrsync. Wenn Sie nur die Unterschiede sehen möchten, ohne tatsächlich zu synchronisieren, verwenden Sie die Schalter --dry-run und --verbose für cwrsync. – mivk

5

Batchfile

@echo off 
if "%2" == "" GOTO Usage 

cd /D %1 
if errorlevel 1 goto usage 

for %%x in (*.*) do if NOT exist %2\%%x echo missing %2\%%x 
cd /D %2 
for %%x in (*.*) do if NOT exist %1\%%x echo missing %1\%%x 

goto end 

:usage 
echo Usage %0 dir1 dir2 
echo where dir1 and dir2 are full paths 
:end 

Nutzungs

Umwelt:

F:\so>dir /s dir1 dir2 
Volume in drive F is WIN2K 
Volume Serial Number is 921E-EC47 

Directory of F:\so\dir1 

2010-11-22 10:33  <DIR>   . 
2010-11-22 10:33  <DIR>   .. 
2010-11-22 10:33     13 a 
2010-11-22 10:33     13 b 
2010-11-22 10:33     13 c 
       3 File(s)    39 bytes 

Directory of F:\so\dir2 

2010-11-22 10:33  <DIR>   . 
2010-11-22 10:33  <DIR>   .. 
2010-11-22 10:33     13 a 
2010-11-22 10:33     13 b 
2010-11-22 10:33     13 c 
2010-11-22 10:33     13 D 
2010-11-22 10:33     13 E 
       5 File(s)    65 bytes 

    Total Files Listed: 
       5 File(s)    65 bytes 
       2 Dir(s)  219,848,704 bytes free 

F:\so> 

Running:

F:\so\dir1>dirc f:\so\dir1 f:\so\dir2 

F:\so\dir1>dirc f:\so\dir1 f:\so\dir2 
missing f:\so\dir1\D 
missing f:\so\dir1\E 

F:\so\dir2> 
+0

sehr coole Lösung, aber ich würde gerne wissen, wie das erweitert werden kann. Ich möchte alle Dateien in Verzeichnis und Unterverzeichnissen für Verzeichnis1 finden und dann finden, ob die Datei (en) auch in Verzeichnis/Unterverzeichnis für Verzeichnis2 vorhanden sind. – AquaAlex

Verwandte Themen