nemesys82

Windows batch - Pfad zuschneiden und ein Teil in eine Variable speichern

Hallo zusammen,

ich habe bisher recht einfache batch geschrieben und bin jetzt mit meinem neuen Projekt etwas überfordert. Ich hoffe ihr könnt mir weiterhelfen.

Für Dokumente baue ich gerade ein Archiv auf. Ich habe für die 16 Bundesländer einzelne Ordnerstrukturen erstellt. In allen Strukturen liegen oft die gleiche Inhalte. Nun möchte ich von einem Bundesland ein Dokument in die anderen 15 kopieren.

Beispiel1:

d:\bayern\ebene1\ebene2\ebene3
d:\nrw\ebene1\ebene2\ebene3
...

Beispiel2:

d:\bayern\ebene1\ebene2\ebene3\ebene4
d:\nrw\ebene1\ebene2\ebene3\ebene4
...

Ab dem Ordner ebene1 ist die Ordnerstruktur identisch. Der Inhalt von ebene3 soll nun aus bayern heraus in alle anderen 15 Bundesländer kopiert werden.

Nun meine Frage:
Wie kann ich den ausgelesenen Pfad so zuschneiden, dass ich diesen ab der ebene1 in eine Variable speichern kann? Dies sollte jedoch für beide Beispiele gelten. Der Name Ebene1 sollte auch variabel sein.

Viele Grüße
Nemesys
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 221689

Url: https://administrator.de/forum/windows-batch-pfad-zuschneiden-und-ein-teil-in-eine-variable-speichern-221689.html

Ausgedruckt am: 08.06.2025 um 04:06 Uhr

colinardo
colinardo 11.11.2013 um 20:59:30 Uhr
Goto Top
Hallo Nemesys,
das Zerlegen der Pfade kannst du z.B. so machen:
@echo off & setlocal
set "ordner1=d:\bayern\ebene1\ebene2\ebene3"  
for /f "tokens=1,2,3,4,5 delims=\" %%a in ("%ordner1%") DO @(  
	set "ebene1=%%a\%%b\%%c"  
	set "ebene2=%%a\%%b\%%c\%%d"  
	set "ebene3=%%a\%%b\%%c\%%d\%%e"  
)
echo "%ebene1%"  
echo "%ebene2%"  
echo "%ebene3%"  
Grüße Uwe
Nemesys82
Nemesys82 12.11.2013 um 09:11:19 Uhr
Goto Top
Hallo Colinardo,

vielen Dank für deine Antwort. Diese ist sehr hilfreich.
Wie kann ich in folgendem Code die for-Schleife abbrechen, wenn das Ende des Pfades erreicht ist?

@echo off & setlocal

set dir=%cd%
for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13 delims=\" %%a in ("%cd%") DO @(
set "basiswissen=\%%h\%%i\%%j\%%k\%%l\%%m\%%n"
)

echo %basiswissen%
pause

VG Nemesys
colinardo
colinardo 12.11.2013 um 09:29:14 Uhr
Goto Top
Zitat von @Nemesys82:
Wie kann ich in folgendem Code die for-Schleife abbrechen, wenn das Ende des Pfades erreicht ist?
Brauchst du doch nicht, %cd% ist doch eh nur eine Zeile.
Wenn du es trotzdem mal brauchst setze ein goto :ende in die Schleife und ein :ende außerhalb der Schleife.
Alternativ kannst du auch mit find Leerzeilen aus dem String für die FOR-Schleife entfernen.
for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13 delims=\" %%a in ('echo "%cd%" ^| find -v ""') DO @(   
  set "basiswissen=\%%h\%%i\%%j\%%k\%%l\%%m\%%n"  
)
Grüße Uwe
Nemesys82
Nemesys82 12.11.2013 um 10:47:03 Uhr
Goto Top
Das Problem sind die letzten Variablen, wenn diese nicht belegt sind. Wenn ich einen xcopy-Befehl damit definiere werden zusätzliche Unterordner angelegt. z.B. %n. Außerdem werden die zusätzlichen \ drangehängt. Wie kann ich das verhindern?

Gibt es einen Befehl, mit dem man sagen kann, dass der String einer Variable an einer definierten Stelle getrennt wird und die beiden Teile in zwei verschiedene Variablen gespeichert werden?
colinardo
colinardo 12.11.2013 aktualisiert um 11:43:19 Uhr
Goto Top
du kannst die Definition der Token in der For-Schleife auch so machen:
"tokens=1,2,3,4,5,*"
so wird z.B. der 5ten Variablen der ganze Rest des Pfades zugewiesen.
Wieso der ganze Aufwand ? xcopy kann doch ganze Unterordner rekursiv kopieren

Grüße Uwe
Nemesys82
Nemesys82 12.11.2013 um 11:37:44 Uhr
Goto Top
Dein Vorschlag hat bei mir leider nicht funktioniert. Der Stern liefert leider nicht das gewünschte Ergebnis.
Ich habe delims=basiswissen definiert, das hat leider auch nicht funktioniert. Geht das nicht oder habe ich was falsch gemacht?

Der Aufwand muss leider sein. Ich möchte gezielt Ordner mit dem Inhalt kopieren.
colinardo
colinardo 12.11.2013 aktualisiert um 13:27:10 Uhr
Goto Top
Zitat von @Nemesys82:
Dein Vorschlag hat bei mir leider nicht funktioniert. Der Stern liefert leider nicht das gewünschte Ergebnis.
sorry da hatte ich ein Komma vergessen:
"tokens=1,2,3,4,5,*"
geht aber auch so:
"tokens=1-5*"
hier wäre also dann in %%f der ganze Rest der Zeile
Ich habe delims=basiswissen definiert, das hat leider auch nicht funktioniert. Geht das nicht oder habe ich was falsch gemacht?
geht nicht hinter delims= werden immer nur einzelne Zeichen als Trennzeichen definiert
Nemesys82
Nemesys82 13.11.2013 um 08:15:38 Uhr
Goto Top
Vielen Dank. Die Batch läuft jetzt wie gewünscht. face-smile
colinardo
colinardo 13.11.2013 um 09:11:32 Uhr
Goto Top
Alles klar, dann bitte den Beitrag noch als gelöst markieren. Merci.

Grüße Uwe