l-ne0n
Goto Top

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:

"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"  
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:

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. face-smile

LG
Neon

Content-ID: 3995428449

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

rubberman
Lösung rubberman 20.09.2022 aktualisiert um 12:44:07 Uhr
Goto Top
Ich vermute
robocopy %%z "N:\2022\%%~nxz" ...  
ist wonach du suchst?

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  
  )
)
l-Ne0n
l-Ne0n 20.09.2022 aktualisiert um 13:46:22 Uhr
Goto Top
Zitat von @rubberman:

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  
  )
)

Ich muss zugeben - ich hab keine Ahnung was genau da in Zeile 2 passiert bzw. wie sich der Zielpfad in Zeile 3 bildet.
Kannst du mir das halbwegs erklären?
rubberman
rubberman 20.09.2022 aktualisiert um 15:46:33 Uhr
Goto Top
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
l-Ne0n
l-Ne0n 22.09.2022 um 13:22:20 Uhr
Goto Top
Vielen Dank!