Umgekehrte Reihenfolge bei Variablenerstellung (for-Schleife)
Hallo und einen schönen Vor-Freitag-Morgen!
Ich habe eine for-Schleife und den Wunsch eine bestimmte Datei so in Variablen zerlegen zu lassen, dass diese optimal weiterverarbeitet werden können.
Der Code soll später Teil eines anderen Quelltextes werden und ist somit erstmal darauf ausgelegt um zu erkennen, ob die Variablen korrekt zugewiesen wurden. Die Äußere Schleife funktioniert, die innere auch, aber ich hätte gerne die Dateiauswahl umgekehrt. %%a enthält z.B c:\Überordner\Unterordner\Dateiname.dt dieser wird in c: und Überordner\Unterordner\Dateiname.dt zerlegt. Erwünscht wäre aber der umgekehrte Fall: c:\Überordner\Unterordner und Dateiname.dt .
Hier ein Beispiel einer Datei, aus der gelesen würde:
C:\Arbeitskopie\trunk\Daten\SoftwarePaket\Batch Dateien\dateiname1 , 4000
C:\Arbeitskopie\trunk\Daten\SoftwarePaket\dateiname2
Wie man sieht wird in %%a der komplette Pfad und in %%b die Revision gespeichert, wobei diese nicht immer vorliegen muss.
Falls sonstige Syntaktische Probleme enthalten sind würde ich mich auch über eine Verbesserung freuen.
Ich habe eine for-Schleife und den Wunsch eine bestimmte Datei so in Variablen zerlegen zu lassen, dass diese optimal weiterverarbeitet werden können.
for /f "tokens=1,2 delims=," %%a in (C:\Arbeitskopie\trunk\Daten\SoftwarePaket\Batch-Dateien\data.txt) do (
echo ++ %%a %%b
for /f "tokens=1* delims=\" %%1 in (%%a) do call :Sub2 "%%1" "%%2" "%%b"
)
:PROCESS
echo %1
echo %2
echo %3
echo %1\%2\%3
echo +++++++++++++++++++++++++++++++++++++++++++
Der Code soll später Teil eines anderen Quelltextes werden und ist somit erstmal darauf ausgelegt um zu erkennen, ob die Variablen korrekt zugewiesen wurden. Die Äußere Schleife funktioniert, die innere auch, aber ich hätte gerne die Dateiauswahl umgekehrt. %%a enthält z.B c:\Überordner\Unterordner\Dateiname.dt dieser wird in c: und Überordner\Unterordner\Dateiname.dt zerlegt. Erwünscht wäre aber der umgekehrte Fall: c:\Überordner\Unterordner und Dateiname.dt .
Hier ein Beispiel einer Datei, aus der gelesen würde:
C:\Arbeitskopie\trunk\Daten\SoftwarePaket\Batch Dateien\dateiname1 , 4000
C:\Arbeitskopie\trunk\Daten\SoftwarePaket\dateiname2
Wie man sieht wird in %%a der komplette Pfad und in %%b die Revision gespeichert, wobei diese nicht immer vorliegen muss.
Falls sonstige Syntaktische Probleme enthalten sind würde ich mich auch über eine Verbesserung freuen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 116046
Url: https://administrator.de/forum/umgekehrte-reihenfolge-bei-variablenerstellung-for-schleife-116046.html
Ausgedruckt am: 08.04.2025 um 06:04 Uhr
4 Kommentare
Neuester Kommentar

Moin moin Phanterstyle,
Zuviel der Ehre,
kleine Probleme löst man selbst durch Trial and Error.
Uns als Vor-Debugging-Stufe zu missbrauchen ist schon die Härte.
Gruß
LotPings
PS: Es tut weh, Subs müssen vom normalen Programmfluss getrennt werden!
Da gehört (fasst) immer ein Goto :eof davor.
Falls sonstige Syntaktische Probleme enthalten sind würde ich mich auch über eine Verbesserung freuen.
Zuviel der Ehre,
kleine Probleme löst man selbst durch Trial and Error.
Uns als Vor-Debugging-Stufe zu missbrauchen ist schon die Härte.
Gruß
LotPings
PS: Es tut weh, Subs müssen vom normalen Programmfluss getrennt werden!
Da gehört (fasst) immer ein Goto :eof davor.

Hallo nochmal,
wenn du einen Call machst, sollte es auch eine Subroutine mit dem Namen geben
Ansonsten hast du hier mal ein Beispiel für einen rekursuven Aufruf.
Gruß
PS: Ich habe den Dateinamen in Anführungszeichen gesetzt, weil ich nicht deine Ordnerstruktur habe.
wenn du einen Call machst, sollte es auch eine Subroutine mit dem Namen geben
Ansonsten hast du hier mal ein Beispiel für einen rekursuven Aufruf.
@Echo off&Setlocal
Set Datei=C:\Arbeitskopie\trunk\Daten\SoftwarePaket\Batch-Dateien\data.txt
for /f "tokens=1,2 delims=," %%a in ("%Datei%") do CAll :PROCESS "%%a"
Goto :Eof
:PROCESS
echo %~dp1 -- %~nx1
set "Pfad=%~dp1"&IF "%Pfad:~4%" NEQ "" CAll :PROCESS "%Pfad:~,-1%"
Gruß
PS: Ich habe den Dateinamen in Anführungszeichen gesetzt, weil ich nicht deine Ordnerstruktur habe.