kostas
Goto Top

Robocopy Verzeichnisname Datenbank und ini files NICHT kopieren jedoch NUR von der Root ansonsten schon

Hallo Zusammen,

ich versuche mit Robocopy eine Verzeichnisstruktur von Quelle nach Ziel zu kopieren. Dabei sollen alle Dateien und Unterverzeichnisse kopiert werden.
Ausnahme: Das Verzeichnis Datenbank in der Root und alle .ini Files in er Root sollen nicht kopiert werden. Wenn das Verzeichnis "Datenbank" und weitere .ini Files in Unterverzeichnissen stehen, sollen sie schon kopiert werden.

rem /E alle Verzeichnise und Unterverzeichnise kopieren
rem /xd Verzeichnis ausschließen
rem /xf Dateien ausschließen

robocopy Quelle Ziel *.* /E /xd Datenbank /xf *.ini

c:\Quelle\Programm.ini
c:\Quelle\Datenbank\MeineDatenbank.sql
c:\Quelle\SEPA\Datenbank\db.dat
c:\Quelle\SEPA\SEPATool.exe
c:\Quelle\SEPA\SEPATool.ini

Wenn ich das Kommando wie oben ausführe, wird c:\Quelle\SEPA\Datenbank\db.dat nicht kopiert weil "Datenbank" in der Ignore Liste ist.
Ebenfalls wir die c:\Quelle\SEPA\SEPATool.ini nicht kopiert weil alle .ini Files in der Ausnahme stehen.

Das hat auch nicht funktioniert:
robocopy Quelle Ziel *.* /E /xd \Quelle\Datenbank /xf \Quelle\*.ini
robocopy Quelle Ziel *.* /E /xd Quelle\Datenbank /xf Quelle\*.ini

Hat jemand eine Idee?

Content-Key: 527871

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

Ausgedruckt am: 26.04.2024 um 15:04 Uhr

Mitglied: emeriks
emeriks 20.12.2019 um 11:19:34 Uhr
Goto Top
Hi,
Zitat von @Kostas:
Hat jemand eine Idee?
Womit auch immer (Batch, PS, VBscript) ...
  • mit "For Each" durch die Elemente der Quellen-Root gehen
  • für jedes Verzeichnis außer "Datenbank" einen Robocopy-Job auslösen
  • jede Datei außer *.ini kopieren

E.
Mitglied: mayho33
Lösung mayho33 20.12.2019 aktualisiert um 17:26:07 Uhr
Goto Top
Hi!

Die Parameter /E /S kopieren alle Verzeichnisse und Unterverzeichnisse inkl Files und leere Ordner
/XF: Ausnahme Datei
/XD: Ausnahme Ordner

roko


Du musst deinen Job also aufteilen.

Zuerst Alles was du sicher brauchst. Also...
Robocopy "c:\Source" D:\Destination" /xd "DatenBank" /xf "*.ini" /E /S R:5 W:5 UNINLOG+:C:\Logs\robo.log  

Im zweiten Schritt...
Robocopy "c:\Source\Datenbank" D:\Destination" /xf "*.ini" "*.sql" "*.exe" /E /S R:5 W:5 UNINLOG+:C:\Logs\robo.log  

Grüße!
Mitglied: Kostas
Kostas 21.12.2019 um 10:22:20 Uhr
Goto Top
Ja, so kann ich es machen.
Schade dass es nicht möglich ist, komplette Pfade in die Ignore Liste aufzunehmen sondern nur Verzeichnisbezeichner.
In meinem Fall kommt es nicht vor das in den Unterverzeichnissen weitere .ini Files existieren. Deshalb kann ich im zweiten Aufruf SEPA komplett kopieren.

Vielen Dank und eine Schöne Zeit zusammen.
Mitglied: emeriks
emeriks 22.12.2019 um 17:08:10 Uhr
Goto Top
Zitat von @Kostas:
In meinem Fall kommt es nicht vor das in den Unterverzeichnissen weitere .ini Files existieren. Deshalb kann ich im zweiten Aufruf SEPA komplett kopieren.
Dann ist aber Deine ursprüngliche Problembeschreibung mangelhaft und deshalb irreführend.
Mitglied: Kostas
Kostas 22.12.2019 aktualisiert um 17:28:02 Uhr
Goto Top
Hallo emeriks,

ich meinte das so: zufällig ist meine Verzeichnisstruktur so dass in den Unterverzeichnissen keine weitere Ordner namens Datenbank existieren und zufällig auch keine weitere ,ini Files in den Unterverzeichnissen existieren. Deshalb kann ich den Vorschlag über zwei Aufrufe umsetzen.

Gesucht habe ich dennoch nach einer Möglichkeit in dieser ich den Pfad angeben kann in der Ignore Liste.


nach dem Muster:
Ignoriert alle Verzeichnisse namens Datenbank und alle Dateien von Typ .ini Das funktioniert einwandfrei
robocopy Quelle Ziel *.* /E /xd Datenbank /xf *.ini

Ignoriere den Ordner Datenbank nur aus root und ignoriere alle .ini Dateien aus der Root. Das funktioniert leider nicht und das ist schade.
robocopy Quelle Ziel *.* /E /xd \Quelle\Datenbank /xf \Quelle\*.ini

Dir noch eine schöne Zeit.
Mitglied: mayho33
mayho33 23.12.2019 um 09:57:20 Uhr
Goto Top
Zitat von @Kostas:

Gesucht habe ich dennoch nach einer Möglichkeit in dieser ich den Pfad angeben kann in der Ignore Liste.

Das gibt es schon. Schau dir mal den Parameter /PURGE an. Du kannst dir ein Struktur-Model basteln. Im Ziel wird dann alles gelöscht was in der Source nicht mehr vorhanden ist

Auch der Parameter /LEV lässt zu, dass du 'n' in die Tiefe gehst zum Kopieren.

nach dem Muster:
Ignoriert alle Verzeichnisse namens Datenbank und alle Dateien von Typ .ini Das funktioniert einwandfrei
robocopy Quelle Ziel *.* /E /xd Datenbank /xf *.ini

So ist das Beispiel gedacht

Ignoriere den Ordner Datenbank nur aus root und ignoriere alle .ini Dateien aus der Root. Das funktioniert leider nicht und das ist schade.
robocopy Quelle Ziel *.* /E /xd \Quelle\Datenbank /xf \Quelle\*.ini

/XF und /XD haben sehr wohl die Option ganze Pfade zu verarbeiten. Du kannst also 2x oder öfter einen gesamten Pfad mit identischer Struktur und Benennung angeben. So ist es etwas selektiver.

/XD "Datenbank" = Alles was so ausschaut
/XD "Source\bla\Datenbank" "Source\Bla\Bla\BLA\Datenbank" = Nur die 2

Dito bei /XF. Zumindest steht es so beschrieben.
roko2

Ich habe es noch nie so selektiv eingesetzt. Mir ist es lieber mehrere Befehle abzusetzen.

Grüße!
Mitglied: Kostas
Kostas 23.12.2019 um 12:00:34 Uhr
Goto Top
Ah, ein Teilerfolg haben wir schon mal. Mit den Verzeichnissen funktioniert es wenn sie in Hochkomma sind
robocopy c:\Quelle c:\Ziel *.* /E /xd "c:\Quelle\Datenbank" << so gehts
Der Ordner C:\Quelle\Datenbank wird nicht kopiert, jedoch der Ordner C:\Quelle\SEPA\Datenbank wird kopiert. Das ist perfekt.

Selbiges mit Dateien geht allerdings nicht. FEHLER: Ungültiger Parameter #10 : "c:\Quelle\*.ini"
Alle .ini Files aus c:\Quelle dürfen nicht kopiert werden. Alle andere .ini Files in Unterverzeichnissen schon.
robocopy c:\Quelle c:\Ziel *.* /E /xd "c:\Quelle\Datenbank" /xf "c:\Quelle\*.ini"

ist sicherlich nur noch eine Kleinigkeit. Ich werde mal genau nach /xf mit wirdcard suchen...