dobym24
Goto Top

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

Content-Key: 245818

Url: https://administrator.de/contentid/245818

Ausgedruckt am: 29.03.2024 um 09:03 Uhr

Mitglied: killtec
killtec 07.08.2014 um 14:55:44 Uhr
Goto Top
Hi,
zum 2. erstmal: Heißen die Ordner wie die Computer?
Sprich heißt dein copmputer_7911 auch computer_7911? Falls ja könntest du das mit %computername% einpflegen.
Zu 1: weiß nicht genau ob das evtl. mit robocopy geht.

Gruß
Mitglied: dobym24
dobym24 07.08.2014 um 15:43:54 Uhr
Goto Top
Hallo Killtec,

um genau zu sein heißt der Order "Daten_xxxx". Die Zahl ist immer unterschiedlich. Das ich Computername geschrieben habe ist wohl etwas verwirrend.

Läuft robocopy auf XP ? Mein System kennt den Befehl nicht
Mitglied: dobym24
dobym24 07.08.2014 um 15:47:21 Uhr
Goto Top
Ich habe
xcopy /FKVEY x:\daten_?* c:\daten_*
probiert, aber er kopiert nur Haupt- mit Unterordner OHNE Inhalt.
Mitglied: killtec
killtec 07.08.2014 aktualisiert um 15:51:03 Uhr
Goto Top
Robocopy kannst du einfach runterladen und ins system32 Verzeichnis kopieren. Dann funktioniert das auch bei XP face-smile

Edit:
Hier kannst du auch noch mal schauen.
http://www.heise.de/ct/hotline/Kopierte-Dateien-ueberpruefen-326742.htm ...

Gruß
Mitglied: Friemler
Friemler 09.08.2014 um 22:31:11 Uhr
Goto Top
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.

@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
Mitglied: dobym24
dobym24 12.08.2014 um 09:46:31 Uhr
Goto Top
hallo, ich habe mir jetzt mal robocopy angeschaut und für gut befunden, aber .......
ich google mir die finger wund. Robocopy kann nur bestimmte Dateien übernehmen / ausschliessen und bestimmete Prdner ausschließen.
Ich möchte aber einen bestimmten Ordner kopieren der bislang nur auf der Quelle vorhanden ist.
Bei Friemlers Lösung muss die Wuelle ja eindeutig benannt sein. Die weiß ich aber im Vorfeld nicht.
C:\Daten_ ist immer gleich. Danach kommt eine Zahl die immer variiert. Ich habe es mit Wildcarts versucht - finde aber keine Lösung, außer von Hand zu kopieren...........
Mitglied: Friemler
Friemler 12.08.2014 um 20:49:00 Uhr
Goto Top
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.

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