Bestimmte Ordner per Batch-Script automatisiert abgleichen lassen
Moin zusammen,
ich bastel aktuell an einem Batch-Script das per Autotask alle 15 Minuten eine Liste an Dateipfaden (txt-Dokument) durchgehen soll, und dann die entsprechenden Verzeichnisse in ein Netzlaufwerk kopieren soll (eingebundene Nextcloud).
Die "verzeichnisse.txt" sieht folgendermaßen aus:
In dem Dateipfad "C:\...\03 - Daten" gibt es noch mehr Unterordner und auch einzelne Dateien. Die sollen nicht kopiert werden, nur die entsprechenden vier Ordner.
Die Zielpfade sehen dann folgendermaßen aus:
Es wäre aber auch kein Problem, wenn die Dateipfade im Ziel bis auf den Laufwerksbuchstaben 1:1 so lauten würden, wie die der Quelle.
Einmaliges manuelles Anlegen der Zielverzeichnisse ist ebenfalls kein Problem.
Was ich bisher gebastelt habe ist folgendes:
Der Schnipsel Code läuft durch meine txt, ignoriert alle nervigen Leerzeichen, und packt mir immer den Inhalt einer Zeile in Variable z.
Danach führt es für jedes z einen Robocopy-Befehl aus.
Soweit, so gut. Leider kopiert Robocopy natürlich nicht den Ordner, sondern nur den Inhalt.
Außerdem schmeißt das Script alles an einen Ort.
Ich bräuchte jetzt Unterstützung dabei, dass ich im Script irgendwie die Ziele der robocopy-Jobs ebenfalls dynamisch gestalte.
Ich hab das ganze mal mit einer weiteren for-Schleife innerhalb der ersten for-Schleife versucht, aber das hat natürlich nicht geklappt...
Mir fehlt da also gerade sowohl theoretisch die Idee, wie man das umsetzt, als auch ggfs. praktisch das Wissen, mit welchen Befehlen ich das programmiere.
Ich bedanke mich schon mal für jeden der ein wenig Hirnschmalz für mein Problem erübrigt.
LG
Neon
ich bastel aktuell an einem Batch-Script das per Autotask alle 15 Minuten eine Liste an Dateipfaden (txt-Dokument) durchgehen soll, und dann die entsprechenden Verzeichnisse in ein Netzlaufwerk kopieren soll (eingebundene Nextcloud).
Die "verzeichnisse.txt" sieht folgendermaßen aus:
"C:\Dateipfad\2022\1234 - Beispiel\03 - Daten\JPG"
"C:\Dateipfad\2022\1234 - Beispiel\03 - Daten\DOC"
"C:\Dateipfad\2022\1234 - Beispiel\03 - Daten\PDF"
"C:\Dateipfad\2022\1234 - Beispiel\03 - Daten\XML"
"C:\Dateipfad\2022\5678 - Muster\03 - Daten\JPG"
"C:\Dateipfad\2022\5678 - Muster\03 - Daten\DOC"
"C:\Dateipfad\2022\5678 - Muster\03 - Daten\PDF"
"C:\Dateipfad\2022\5678 - Muster\03 - Daten\XML"
"C:\Dateipfad\2022\9999 - Exempel\03 - Daten\JPG"
"C:\Dateipfad\2022\9999 - Exempel\03 - Daten\DOC"
"C:\Dateipfad\2022\9999 - Exempel\03 - Daten\PDF"
"C:\Dateipfad\2022\9999 - Exempel\03 - Daten\XML"
In dem Dateipfad "C:\...\03 - Daten" gibt es noch mehr Unterordner und auch einzelne Dateien. Die sollen nicht kopiert werden, nur die entsprechenden vier Ordner.
Die Zielpfade sehen dann folgendermaßen aus:
"N:\2022\1234 - Beispiel\03- Daten\JPG"
"N:\2022\1234 - Beispiel\03- Daten\DOC"
"N:\2022\1234 - Beispiel\03- Daten\PDF"
"N:\1234 - Beispiel\03- Daten\XML"
Einmaliges manuelles Anlegen der Zielverzeichnisse ist ebenfalls kein Problem.
Was ich bisher gebastelt habe ist folgendes:
for /f "delims=;" %%z in (C:\Dateipfad\2022\verzeichnisse.txt) do (
robocopy %%z "N:\2022" *.* /E /IPG:5 /R:3 /W:10 /NP /TEE
)
Der Schnipsel Code läuft durch meine txt, ignoriert alle nervigen Leerzeichen, und packt mir immer den Inhalt einer Zeile in Variable z.
Danach führt es für jedes z einen Robocopy-Befehl aus.
Soweit, so gut. Leider kopiert Robocopy natürlich nicht den Ordner, sondern nur den Inhalt.
Außerdem schmeißt das Script alles an einen Ort.
Ich bräuchte jetzt Unterstützung dabei, dass ich im Script irgendwie die Ziele der robocopy-Jobs ebenfalls dynamisch gestalte.
Ich hab das ganze mal mit einer weiteren for-Schleife innerhalb der ersten for-Schleife versucht, aber das hat natürlich nicht geklappt...
Mir fehlt da also gerade sowohl theoretisch die Idee, wie man das umsetzt, als auch ggfs. praktisch das Wissen, mit welchen Befehlen ich das programmiere.
Ich bedanke mich schon mal für jeden der ein wenig Hirnschmalz für mein Problem erübrigt.
LG
Neon
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3995428449
Url: https://administrator.de/contentid/3995428449
Ausgedruckt am: 13.11.2024 um 09:11 Uhr
4 Kommentare
Neuester Kommentar
Ich vermute
ist wonach du suchst?
Steffen
EDIT Nee, du musst dich ja tiefer vorarbeiten ...
robocopy %%z "N:\2022\%%~nxz" ...
Steffen
EDIT Nee, du musst dich ja tiefer vorarbeiten ...
for /f "usebackq delims=" %%a in ("C:\Dateipfad\2022\verzeichnisse.txt") do (
for %%b in ("%%~a\..") do for %%c in ("%%~fb\..") do for %%d in ("%%~fc\..") do (
robocopy %%a "N:\%%~nxd\%%~nxc\%%~nxb\%%~nxa" *.* /E /IPG:5 /R:3 /W:10 /NP /TEE
)
)
Kannst du mir das halbwegs erklären?
Klar. Zwei Dinge vorab:
1) Wenn du
FOR /?
ausführst, siehst du dass der Modifikator ~f
einen relativen Pfad zum absoluten Pfad auflöst und dass mit Modifikatoren ~nx
zu Name und Extension (falls ein Verzeichnis auch mal einen Punkt enthält wie eine Datei) aufgelöst wird.2)
\..
spezifiziert den relativen Pfad zum Parent Verzeichnis.In der zweiten Zeile laufe ich also von rechts nach links durch den Pfad und hole mir jeweils den Name des nächsten Parent Verzeichnisses.
Beispiel zur Veranschaulichung:
@echo off &setlocal
for %%a in ("C:\Dateipfad\2022\1234 - Beispiel\03 - Daten\JPG") do (
echo %%a
echo "%%~nxa"
echo ~~~~~
for %%b in ("%%~a\..") do (
echo "%%~fb"
echo "%%~nxb"
)
)
pause
Steffen