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-Key: 3995428449

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

Printed on: April 28, 2024 at 17:04 o'clock

Member: rubberman
Solution rubberman Sep 20, 2022 updated at 10:44:07 (UTC)
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  
  )
)
Member: l-Ne0n
l-Ne0n Sep 20, 2022 updated at 11:46:22 (UTC)
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?
Member: rubberman
rubberman Sep 20, 2022 updated at 13:46:33 (UTC)
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
Member: l-Ne0n
l-Ne0n Sep 22, 2022 at 11:22:20 (UTC)
Goto Top
Vielen Dank!