Verschachtelte Schleife in Batch (Config.txt auslesen)
Hallo miteinander,
eigentlich konnte ich mich immer ganz gut davor bewahren in einem Forum nach Hilfe zu fragen, aber mittlerweile bin ich an einem Punkt angekommen, an dem ich schier am Verzweifeln bin.
Es geht um folgendes: Ich möchte aus einer Config.txt einen Ordner(namen) auslesen und in diesem dann den (Unter-)Ordner löschen, der am aktuellsten ist.
Die äußere FOR-Schleife zieht die erste Spalte aus der Config, wie man an der Struktur sehen kann. In dieser stehen die Ordnernamen. Als nächstes will ich die Anzahl der vorhandenen Ordner in jedem dieser Ordner zählen. Dazu die innere Schleife. So, die Ausgabe über echo zeigt mir nun die richte, gewünschte Zahl an.
Doch wenn ich statt des echos ein
angebe, dann ist count leer bzw. es wird halt keine Datei mit Namen !count!... gefunden.
Wie kann ich den Ordnernamen, nach dem gelöscht werden soll so zusammenbauen, dass count tatsächlich die gefundene Zahl zeigt?
Oder alternativ, wie kann ich die Anzahl der Ordner ohne Schleife ermitteln? Sonstige Anregungen, Vorschläge? Oder eine andere Idee wäre ja, das Datum nicht aus dem Namen zu ermitteln, sondern aus den Attributen, falls das geht? Dann erspar ich mir das durchzählen vllt?
Vielen Dank schonmal,
MfG B.
eigentlich konnte ich mich immer ganz gut davor bewahren in einem Forum nach Hilfe zu fragen, aber mittlerweile bin ich an einem Punkt angekommen, an dem ich schier am Verzweifeln bin.
Es geht um folgendes: Ich möchte aus einer Config.txt einen Ordner(namen) auslesen und in diesem dann den (Unter-)Ordner löschen, der am aktuellsten ist.
@echo off
setlocal enabledelayedexpansion
for /F "tokens=1,2 delims= " %%a in ('type config.txt') do (
set count=0
for /F %%g in ('dir /b %%a') do (
set /a count+=1
)
echo !count!
)
pause
Die äußere FOR-Schleife zieht die erste Spalte aus der Config, wie man an der Struktur sehen kann. In dieser stehen die Ordnernamen. Als nächstes will ich die Anzahl der vorhandenen Ordner in jedem dieser Ordner zählen. Dazu die innere Schleife. So, die Ausgabe über echo zeigt mir nun die richte, gewünschte Zahl an.
Doch wenn ich statt des echos ein
rd "!count!. Ordner %date%" ::Namensschema der inneren Ordner
Wie kann ich den Ordnernamen, nach dem gelöscht werden soll so zusammenbauen, dass count tatsächlich die gefundene Zahl zeigt?
Oder alternativ, wie kann ich die Anzahl der Ordner ohne Schleife ermitteln? Sonstige Anregungen, Vorschläge? Oder eine andere Idee wäre ja, das Datum nicht aus dem Namen zu ermitteln, sondern aus den Attributen, falls das geht? Dann erspar ich mir das durchzählen vllt?
Vielen Dank schonmal,
MfG B.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 186552
Url: https://administrator.de/forum/verschachtelte-schleife-in-batch-config-txt-auslesen-186552.html
Ausgedruckt am: 23.04.2025 um 14:04 Uhr
3 Kommentare
Neuester Kommentar
Hallo Blubberhorst und willkommen im Forum!
Falls es immer nur darum gehen sollte, den jüngsten Ordner zu löschen, dann ohne Zählerei etwa so:
Dein Ansatz kann (wegen %date%) nur für Ordner mit dem heutigen Datum im Namen funktionieren - und das auch nur, wenn Du vorweg den Ordner "%%a" mit angibst, also
Falls übrigens tatsächlich nur Ordner mit dem Tagesdatum infrage kommen, wäre in meinem Ansatz oben
zu verwenden ...
Was steht denn übrigens genau in der "config.txt"? Aufgrund der "
aus (wobei nicht klar ist, ob der Ordnername ev unter Anführungszeichen steht, weswegen ich vorsichtshalber "
Noch zu
Grüße
bastla
Falls es immer nur darum gehen sollte, den jüngsten Ordner zu löschen, dann ohne Zählerei etwa so:
@echo off
setlocal enabledelayedexpansion
for /F "delims= " %%a in ('type config.txt') do (
for /F %%g in ('dir /b/ad/od "%%~a"') do set "Letzte=%%g"
rd "%%~a\!Letzte!"
)
rd "%%~a\!count!. Ordner %date%"
for /F %%g in ('dir /b/ad/od "%%~a\*%date%"') do set "Letzte=%%g"
Was steht denn übrigens genau in der "config.txt"? Aufgrund der "
for
"-Schleife sähe das nachOrdnername<TAB>noch was
%%~a
" verwendet habe) ...Noch zu
wie kann ich die Anzahl der Ordner ohne Schleife ermitteln?
Ganz ohne geht's zwar nicht, aber Du könntest es so machen:for /f %%g in ('dir /ad "%%~a"') do set "Anzahl=%%g"
bastla
Hallo Blubberhorst!
- damit wird, unabhängig davon, wie viele Leerzeichen enthalten sind, der Ordnername immer "am Stück" geliefert ...
Grüße
bastla
Musste nur noch %%g um %%h und %%i erweitern
Die noch bessere Lösung (hätte ich gleich berücksichtigen sollen) wärefor /F "delims=" %%g in ('dir /b/ad/od "%%~a\*%date%"') do set "Letzte=%%g"
Grüße
bastla