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

Printed on: February 6, 2023 at 16:02 o'clock

Member: emeriks
emeriks Dec 20, 2019 at 10:19:34 (UTC)
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.
Member: mayho33
Solution mayho33 Dec 20, 2019 updated at 16:26:07 (UTC)
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...

Im zweiten Schritt...

Grüße!
Member: Kostas
Kostas Dec 21, 2019 at 09:22:20 (UTC)
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.
Member: emeriks
emeriks Dec 22, 2019 at 16:08:10 (UTC)
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.
Member: Kostas
Kostas Dec 22, 2019 updated at 16:28:02 (UTC)
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.
Member: mayho33
mayho33 Dec 23, 2019 at 08:57:20 (UTC)
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!
Member: Kostas
Kostas Dec 23, 2019 at 11:00:34 (UTC)
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...