Kopierte Dateien per Batch vergleichen
Hallo zusammen,
ich habe folgendes Problem und mittlerweile Tage im Internet verbracht um eine Lösung zu finden...Leider erfolglos
Ich habe eine cmd Batch mit der ich relevante Dateien und Ordner im Falle eines Festplattentausch auf die neue HD übernehme. Hierfür nutze ich xcopy mit diversen Parametern. Soweit klappt das super.
Und jetzt kommt mein Problem - auch wenn mir in meinem Log nicht zu kopierende / lesende Dateien von xcopy als solche ausgegeben werden möchte ich nach jedem Kopierblock einen Vergleich der Quell und Zieldatei in ein anderes Log schreiben. Derzeit nutze ich (noch) den Befehl fc , aber mit dem kann ich nur einen bestimmten Pfad prüfen und es werden keine Unterordner hierbei abgefragt.
Beispiel: C:\Ordner\ beinhalten 3 Ordner mit Namen 1, 2 und 3. Lasse ich den fc auf "Ordner" prüfen werden die Daten in den Unterordner nicht berücksichtigt. Ich weiß aber nicht im Vorfeld wie diese Unterordner heissen. Der Name variiert leider.
Problem 2: Ich muss einen Ordner kopieren dessen Name je nach Computer unterschiedlich ist
Beispiel: c:computer_1\diverse Unterordner nach x:computer_1\, bei einem anderen Rechner heisst dieser c:\computer_7911\diverse Unterordner.
Ich fuchse mich gerade ein wenig in cmd rein. Ich kann nicht mit Programmen arbeiten die installiert werden müssen.
Verzichten könnte ich noch auf das prüfen, aber nicht auf das kopieren.
Langsam verzweifel ich.
Danke für konstruktive Anregungen
ich habe folgendes Problem und mittlerweile Tage im Internet verbracht um eine Lösung zu finden...Leider erfolglos
Ich habe eine cmd Batch mit der ich relevante Dateien und Ordner im Falle eines Festplattentausch auf die neue HD übernehme. Hierfür nutze ich xcopy mit diversen Parametern. Soweit klappt das super.
Und jetzt kommt mein Problem - auch wenn mir in meinem Log nicht zu kopierende / lesende Dateien von xcopy als solche ausgegeben werden möchte ich nach jedem Kopierblock einen Vergleich der Quell und Zieldatei in ein anderes Log schreiben. Derzeit nutze ich (noch) den Befehl fc , aber mit dem kann ich nur einen bestimmten Pfad prüfen und es werden keine Unterordner hierbei abgefragt.
Beispiel: C:\Ordner\ beinhalten 3 Ordner mit Namen 1, 2 und 3. Lasse ich den fc auf "Ordner" prüfen werden die Daten in den Unterordner nicht berücksichtigt. Ich weiß aber nicht im Vorfeld wie diese Unterordner heissen. Der Name variiert leider.
Problem 2: Ich muss einen Ordner kopieren dessen Name je nach Computer unterschiedlich ist
Beispiel: c:computer_1\diverse Unterordner nach x:computer_1\, bei einem anderen Rechner heisst dieser c:\computer_7911\diverse Unterordner.
Ich fuchse mich gerade ein wenig in cmd rein. Ich kann nicht mit Programmen arbeiten die installiert werden müssen.
Verzichten könnte ich noch auf das prüfen, aber nicht auf das kopieren.
Langsam verzweifel ich.
Danke für konstruktive Anregungen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 245818
Url: https://administrator.de/forum/kopierte-dateien-per-batch-vergleichen-245818.html
Ausgedruckt am: 25.04.2025 um 15:04 Uhr
7 Kommentare
Neuester Kommentar
Robocopy kannst du einfach runterladen und ins system32 Verzeichnis kopieren. Dann funktioniert das auch bei XP 
Edit:
Hier kannst du auch noch mal schauen.
http://www.heise.de/ct/hotline/Kopierte-Dateien-ueberpruefen-326742.htm ...
Gruß
Edit:
Hier kannst du auch noch mal schauen.
http://www.heise.de/ct/hotline/Kopierte-Dateien-ueberpruefen-326742.htm ...
Gruß
Hallo dobym24,
schau Dir mal die Ausgabe des folgenden Scripts an. Der Code macht nichts sondern simuliert nur die Befehlsausführung. Evtl.löst das Dein Problem.
Gruß
Friemler
schau Dir mal die Ausgabe des folgenden Scripts an. Der Code macht nichts sondern simuliert nur die Befehlsausführung. Evtl.löst das Dein Problem.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off & setlocal
::Quell- und Zielpfad festlegen
set "CpySrcPath=Q:\Pfad\Zum\Quellverzeichnis"
set "CpyDstPath=Z:\Zielpfad"
::Dateien kopieren
echo xcopy /options "%CpySrcPath%\*.*" "%CpyDstPath%"
::Über die Quellverzeichnisstruktur iterieren und für jedes Verzeichnis
::das Unterprogramm ProcessDir aufrufen
for /d /r "%CpySrcPath%" %%d in (*) do (
call :ProcessDir "%%d"
)
exit /b
:ProcessDir
::Der Pfad des Quellverzeichnisses für den Vergleich kommt als 1. Parameter
::Der Pfad des Zielverzeichnisses für den Vergleich wird daraus erzeugt
set "CmpSrcPath=%~1"
call set "CmpDstPath=%CpyDstPath%%%CmpSrcPath:%CpySrcPath%=%%"
::Testausgabe
echo fc /b "%CmpSrcPath%\*.*" "%CmpDstPath%\*.*"
exit /b
Gruß
Friemler
Hallo dobym24,
irgendeine Gemeinsamkeit muss bei den zu kopierenden Verzeichnissen auf den verschiedenen Systemen schon bestehen, sonst ist es nicht möglich, einen Filter zu definieren, der überall das richtige Verzeichnis findet.
Ansonsten bestünde auch noch die Möglichkeit, aus Deinem Batchscript heraus ein temporäres VBScript auf die Platte zu schreiben, in dem man per Regular Expressions nach Verzeichnissen sucht. Mehrere Varianten von so einem VBScript wurden hier erörtert.
Gruß
Friemler
irgendeine Gemeinsamkeit muss bei den zu kopierenden Verzeichnissen auf den verschiedenen Systemen schon bestehen, sonst ist es nicht möglich, einen Filter zu definieren, der überall das richtige Verzeichnis findet.
C:\Daten_
ist doch schonmal nicht schlecht. Wenn Die Zahl noch eine feste Anzahl Stellen hätte, wäre es perfekt. Bei 4-stelligen Zahlen könntest Du folgenden Schnipsel von einer Konsole aus verwenden:dir /-p /b /a:d "C:\Daten_*.*" | findstr /i /r /b /c:"Daten_[0-9][0-9][0-9][0-9]"
Ansonsten bestünde auch noch die Möglichkeit, aus Deinem Batchscript heraus ein temporäres VBScript auf die Platte zu schreiben, in dem man per Regular Expressions nach Verzeichnissen sucht. Mehrere Varianten von so einem VBScript wurden hier erörtert.
Gruß
Friemler