Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Mit Batch-Datei Verzeichnisse vergleichen

Frage Entwicklung Batch & Shell

Mitglied: Rumbel

Rumbel (Level 1) - Jetzt verbinden

11.08.2005, aktualisiert 28.09.2006, 44457 Aufrufe, 8 Kommentare

Hallo
Ich möchte gerne zwei Verzeichnisse mit einer Batch-Datei vergleichen ob sie den selben inhalt haben und bei bedarf dann das eine Verzeichniss dem anderen angleichen.
Mein Problem ist das ich die beiden Verzeichnisse nicht verglichen bekomme.
Kann mir da vielleicht einer bei helfen?
Schon mal danke.
Mitglied: 11078
11.08.2005 um 12:35 Uhr
Hallo,

allein mit Batch dürfte das sehr kompliziert sein; zumal ein "echter" Vergleich ja nicht nur Dateinamen abgleichen würde sondern auch die Inhalte, bzw. die MD5-Hashes der Dateien vergleichen müsste.

Schau Dir mal das folgende Tool an; es hat eine eingebaute "Batch-Funktion", mit dem sich ein Vergleich automatisieren lässt (Abgleich der Dateien inbegriffen). Scrolle auf der angegebenen Seite mal nach unten zum Abschnitt "Zusätzliche Funktionen", da steht genaueres: http://toolsandmore.de/Central/Produkte/Software/Datei-Tools/Dircomp/


Wenn es auch nur grafisch geht, ist dieses Tool auch noch eine Option:
http://www.winfuture.de/news,21555.html

Unterscheidet sich kaum, nur dass es meines Wissens nach nur über die GUI zu bedienen ist...

Gruß,
TIM
Bitte warten ..
Mitglied: Biber
11.08.2005 um 15:21 Uhr
Moin, Patrick,

auch über CMD ist eine Verzeichnis-Synchronisierung kein Hexenwerk, kommt aber auf die konkreten Anforderungen an.

Wenn es um einen Verzeichnis-Vergleich geht, also darum, den Inhalt und die Unterschiede zweier Verzeichnisse angezeigt zu bekommen und der Benutzer danach manuell Datei für Datei entscheidet, ob und welche Dateiversion in welchem DIR "richtig" ist....dann bist Du mit TIMs zweitem Tipp gut beraten.

Wenn es dagegen um einen automatischen Verzeichnis-Abgleich geht, d.h.
- alle Dateien aus QuellDirA sollen in ZielDirB geschaufelt werden und
- IMMER ist im QuellDirA der einzig wahre und gültige Stand ist und IMMER können die Dateien in ZielDirB ohne Rückfrage überschrieben werden

... dann würde ich einen kleinen Batch vorziehen, der dann ja auch automatisch als Dienst laufen kann... alle 10 Minuten oder alle 5 Stunden oder jeden 3 Freitag im Monat.

Wissen müsste man/frau allerdings noch:
- wenn sich im ZielDirB Dateien befinden, die es im QuellDirA nicht gibt... sollen die auch in ZielDirB gelöscht werden?
- brauchst Du ein Log/Protokolldatei?

Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: geTuemII
12.08.2005 um 11:30 Uhr
Hallo,

sieh Dir mal CloneSpy an: http://www.wintotal.de/softw/index.php?rb=45&id=1062

Die Site http://www.clonespy.com hat die aktuelle Version, aber momentan keine weiteren Versionen zur Verfügung.

HTH geTuemII
Bitte warten ..
Mitglied: Rumbel
12.08.2005 um 13:30 Uhr
Ok ich werde mir alles mal anschauen. Ich danke euch schon mal für die Antworten.
Bitte warten ..
Mitglied: gambist
28.09.2006 um 16:22 Uhr
Das Vergleichen Mittels Batc-Datei geht natürlich. Es ist ein Bißchen Spielerei, aber man vberwendet dafür nur Betriebssystem-Routinen.

Vergleichen unter win2000 DOSmode:

(x) = unterstes Verzeichnis der zu vergleichenden Dateien (oder Laufwerk)
Beispiel: c:\ oder d:\programme\Lieblingsprogramm

in Notetab light Zeilenwechsel als Zeichen zum editieren: Cursor ans Zeilenende, shift-rechts, ^c
in Suchen/ersetzen ^v diesen Wert eingeben


Parameter für dir -> dir /?

1. Verzeichnis anlegen: dir (x) /b/s>Dateiname

2. editieren von Dateiname:
echo on (zum Sicherstellen, daß die Echo-Funktion eingeschaltet ist, ist eigentlich Standard)
Ersetze von "[Zeilenwechsel]" nach "[Zeilenwechsel]echo "
Datei speichern unter Dateiname.bat

3. Datei ausführen "Dateiname.bat>dateiname2"

Jetzt steht in Dateiname2 jede Zeile zeimal da, einmal mit dem Vorspann des Verzeichnisses, aus dem die Anwendung (dateiname.bat) gestartet wurde, einmal ohne.

4. Zuerst in der zweiten Zeile den Anfang jeweils mit xxx versehen:
Wechsle [Zeilenwechsel]c: in [zeilenwechsel]xxx
es steht ja jeweils an der ersten Zeile das Wort echo, geechot aus dem DOS-BEfehl. Damit ist die Identifizierung jeder zweiten Zeile eindeutig.

5. In Dateiname2 das Wort echo durch comp ersetzen,
[Zeilenwechsel]xxx durch " [Zeilenwechsel](Zielverzeichnis)" ersetzen

6. Dateiname2 unter dateiname2.bat speichern.

7. dateiname2 starten.

Auf dem Bildschirm ist jetzt das Ergebnis des Vergleiches zu beobachten. Optional kann die Batch-Datei auch unter dateiname2>logfile gestartet werden. Damit wird das Ergebnis in die Datei geschrieben

dateiname; dateiname2; logfile sind frei wählbare Dateinamen. Die Dateierweiterung ".bat" muß natürlich nicht getippt werden.

Bei Rückfragen stehe ich gerne zur Verfügung.

Viel Erfolg!

Wolfgang
Bitte warten ..
Mitglied: Biber
28.09.2006 um 20:53 Uhr
Na ja, gambist,

da bin ich nicht so ganz überzeugt von Deiner Strategie.

Wenn ich irgendwo Verzeichnisse A und B vergleichen will, gibt es IMHO drei unbedingt nötige Informationen, die ich liefern muss bzw. sehen will:

- Dateien, die in Verzeichnis A existieren und nicht in Verzeichnis B
- Dateien, die in Verzeichnis B existieren, aber in A fehlen
- Dateien, die in A und B unterschiedlich sind

Für ein Minimum an Entgegenkommen an den Benutzer würden noch als Selbstverständlichkeit dazukommen:
- nur gefundene "Unterschiede" anzeigen - nicht Dateien, die identisch sind
- und bei Unterschieden: Eine Zeile anzeigen pro Datei-Unterschied (nicht mal 2 und mal 7 Zeilen)

Danach kämen die "wünschenswerten" Anforderungen, die ich nur teilweise ohne Verrenkungen mit Batch-Bordmitteln machen kann:
- Verzeichnisstrukturen rekursiv durchsuchen (das wäre noch machbar)
- wenigstens anzeigen, welche Datei die neuere ist (wird schon hakelig)
- die Inhalts-Unterschiede zeilenweise anzeigen bei Textdateien (hmmja.....)
- auch eine Option zum Ersetzen/Synchronisieren anbieten (da hörts dann auf)

However, für die ersten 5 Mimimalansprüche würde ein Quick'n'Dirty-Batch reichen.
Für alles, was darüber hinausgeht, würde ich jemand fragen, der etwas davon versteht - siehe die Verweise auf die einschlägigen Tools oben.

Ein schnell zusammengebratener Batch könnte zu aussehen:
01.
::----snipp QuickNDirtyDirComp.bat [Param1: VerzeichnisA Param2: VerzeichnisB] 
02.
@echo off  
03.
for  %%i in ("%1\*.*") do ( 
04.
    if not exist "%2\%%~nxi" ( 
05.
       echo [in Verz 2:] "%2\%%~nxi" nicht vorhanden. 
06.
    ) ELSE (   
07.
       fc "%%i" "%2\%%~nxi">nul|| echo Dateien "%%~nxi" sind unterschiedlich. 
08.
)) 
09.
for  %%i in ("%2\*.*") do if not exist "%1\%%~nxi" echo [in Verz 1:] "%1\%%~nxi" nicht vorhanden.
Der Output von dem Schnipsel würde so aussehen:
01.
>quickndirtyDirComp d:\temp\templogs d:\temp\$home\logs 
02.
Dateien "2006-09-28.log" sind unterschiedlich. 
03.
Dateien "log.txt" sind unterschiedlich. 
04.
[in Verz 2:] "d:\temp\$home\logs\temp.txt" nicht vorhanden. 
05.
[in Verz 1:] "d:\temp\templogs\2005logs.txt" nicht vorhanden. 
06.
[in Verz 1:] "d:\temp\templogs\2006-07-03.log" nicht vorhanden. 
07.
[in Verz 1:] "d:\temp\templogs\2006-07-04.log" nicht vorhanden. 
08.
[in Verz 1:] "d:\temp\templogs\2006-07-05.log" nicht vorhanden. 
09.
[in Verz 1:] "d:\temp\templogs\2006-07-06.log" nicht vorhanden. 
10.
[in Verz 1:] "d:\temp\templogs\2006-07-07.log" nicht vorhanden. 
11.
[in Verz 1:] "d:\temp\templogs\2006-07-10.log" nicht vorhanden. 
12.
[in Verz 1:] "d:\temp\templogs\2006-07-11.log" nicht vorhanden. 
13.
...
Das wäre aber auch das Maximum an Aufwand, das mir für eine Batchvariation des Themas sinnvoll erscheint.

[Was ich aber für sinnvoll halte:
So etwas in einem Batch-Einsteigerkurs als Praxis-Aufgabe stellen.
Weil sich da gut sehen lässt, wer sofort mit tippseln anfängt und wer sich erst eine Strategie überlegt].

So - ich bin nun alles losgeworden, was ich zur Frage "Mit Batch-Datei Verzeichnisse vergleichen" loswerden wollte.

Grüße
Biber
Bitte warten ..
Mitglied: Maertenz
09.04.2016 um 20:49 Uhr
Hab das obige Skript mal erweitert/modifiziert. FC funktionierte bei mir nicht mit MP4-Dateien - evtl. zu groß? Statt dessen prüfe ich Dateigröße und, wenn die identisch ist Datum/Uhrzeit. Letzteres war leider nur auf Basis von Minuten möglich, habe es nicht geschafft, die Sekunden auszulesen. In Einzelfällen kann es passieren, dass Dateistempel sich beim Kopieren etwas ändern -> dazu kann man eine Toleranz eingeben (im Skript derzeit Tlr = 1 (min)). Als Gimmick zählt das Skript noch die unterschiedlichen Dateien

01.
@echo off   
02.
setlocal EnableDelayedExpansion 
03.
cls 
04.
 
05.
Set Root=M:\ 
06.
Set Dest=C:\Users\ich\OneDrive\ 
07.
 
08.
REM Toleranz in Minuten beim Zeitvergleich 
09.
set Tlr=1 
10.
set /A CompR=0 
11.
set /A CompD=0 
12.
set /A MissD=0 
13.
set /A MissR=0 
14.
set /A Diff=0 
15.
 
16.
echo. 
17.
echo Erst Dateien in %Root% pruefen 
18.
for /f "delims=" %%i in ('dir "%Root%" /b /s /a-d') do (set RF=%%i&& set /A CompR=CompR+1 && set DF=!RF:%Root%=%Dest%!&& if not exist !DF! (echo %%~nxi -----^> nicht in %Dest% vorhanden! && set /A MissD=MissD+1) else (set RT=%%~ti && set RS=%%~zi && set RTIso=!RT:~8,2!!RT:~3,2!!RT:~0,2!!RT:~11,2!!RT:~14,2! && for %%j in ("!DF!") do (set DS=%%~zj && IF !DS! neq !RS! (echo %%~nxi -----^> hat andere Groesse in %Dest%! && set /A Diff=Diff+1) else set DT=%%~tj && set DTIso=!DT:~8,2!!DT:~3,2!!DT:~0,2!!DT:~11,2!!DT:~14,2! && set /A DTIsoMinus=!DTIso!-%Tlr% && set /A DTIsoPlus=!DTIso!+%Tlr% && if !RTIso! gtr !DTIsoPlus! (echo %%~nxi #####^> ist in %Root% neuer als in %Dest%! && set /A Diff=Diff+1) else if !RTIso! lss !DTIsoMinus! (echo %%~nxi -----^> ist in %Root% aelter als in %Dest%! && set /A Diff=Diff+1) ))) 
19.
 
20.
echo. 
21.
echo Nun Dateien in %Dest% pruefen 
22.
for /f "delims=" %%i in ('dir "%Dest%" /b /s /a-d') do (set RF=%%i&& set /A CompD=CompD+1 && set DF=!RF:%Dest%=%Root%!&& if not exist !DF! (echo %%~nxi -----^> nicht in %Root% vorhanden! && set /A MissR=MissR+1)) 
23.
 
24.
echo %CompR% Dateien in %Root% geprueft 
25.
echo %CompD% Dateien in %Dest% geprueft 
26.
echo %MissR% Dateien fehlen in %Root% 
27.
echo %MissD% Dateien fehlen in %Dest% 
28.
echo %Diff% Dateien sind in %Root% anders als in %Dest%
Feedback welcome!
Bitte warten ..
Mitglied: volker01
19.06.2016 um 13:31 Uhr
Es bleiben doch einige Unwägbarkeiten, wie z.Bsp. spezielle Zeichen in Dateinamen, (zu) lange Dateinamen, etc.

Mein Favorit ist das Open-Source Programm FreefileSync:
Wird über eine grafische Oberfläche eingerichtet, hat einen Batch-Modus, gibt einen Errorlevel aus, schreibt eine Log-Datei, kann mit geöffneten Dateien umgehen (VSS). Kommt mit langen Pfaden zurecht ...
(Installer enthält Adware)

Gruß Volker01
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...