Anzahl der Verzeichnisse innerhalb eines Batch bestimmen
Hallo
Ich bin neu hier und habe auf Anraten in einem anderen Forum hierher gefunden.
Natürlich sucht man in einem Forum Antworten auf Fragen, also...
(Naja, eigentlich sind es drei verschiedene Fragen welche alle miteinander zu tun haben. Aber ich teile die mal auf verschiedene Threads auf und hoffe dass das in eurem Sinne ist.
In Anlehnung an bestimmten Ordner per Batch-Datei löschen
habe ich das Beispiel geringfügig abgewandelt:
::-------old_save_erase.cmd
@echo off
(set /a MaxOldDirs=4) & (set /a counter=12)
:: MaxDirs = Anzahl der verbleibenden Verzeichnisse
set /a MaxDirs=MaxOldDirs-1
@echo MaxOldDirs=%MaxOldDirs%
::-- for /f "delims=" %%i in ('dir /Ad /b /o:<blubb>-D "?? ??.??.200?"') do call :loop "%%i"
for /f "delims=" %%i in ('dir /Ad /b /o: "j:\datasave" -D "?? ??.??.20??"') do call :loop "%%i"
goto :eof
:loop
set /a counter=%Counter%-1
if %counter% LEQ %MaxDirs% (echo %~1 ...%Counter% ^<^= %MaxDirs%....ok, kann bleiben) & goto :eof
echo %~1 ...%Counter% ^> %MaxDirs% ...hau ich wech mit RD *gg
::rd %1 /s /q
goto :eof
::-------end old_save_erase.cmd
Eigentlich tut es genau das was ich möchte, jedoch nur wenn die Anzahl der vorhandenen Verzeichnisse mit der Vorgabe der Variable "counter" übereinstimmt.
Wie kann ich am Begin des Batch die Anzahl der existierenden Verzeichnisse bestimmen? Diese möchte ich dann der Variable "counter" zuweisen.
Wie kann man das zu verwendende Datumsformat einstellen (z.B: 2006/09/24), 20.09.2006 ist "unschön"? Das Systenstandardformat sollte jedoch erhalten (unberührt) bleiben.
THX
flic
PS: Die Links zu den anderen Fragen liefere ich nach.
Hier der Link zu Beitrag Nr. 2: Logfile während Verzeichniskopie erstellen und bei Fehler Aktion auslösen
Ich bin neu hier und habe auf Anraten in einem anderen Forum hierher gefunden.
Natürlich sucht man in einem Forum Antworten auf Fragen, also...
(Naja, eigentlich sind es drei verschiedene Fragen welche alle miteinander zu tun haben. Aber ich teile die mal auf verschiedene Threads auf und hoffe dass das in eurem Sinne ist.
In Anlehnung an bestimmten Ordner per Batch-Datei löschen
habe ich das Beispiel geringfügig abgewandelt:
::-------old_save_erase.cmd
@echo off
(set /a MaxOldDirs=4) & (set /a counter=12)
:: MaxDirs = Anzahl der verbleibenden Verzeichnisse
set /a MaxDirs=MaxOldDirs-1
@echo MaxOldDirs=%MaxOldDirs%
::-- for /f "delims=" %%i in ('dir /Ad /b /o:<blubb>-D "?? ??.??.200?"') do call :loop "%%i"
for /f "delims=" %%i in ('dir /Ad /b /o: "j:\datasave" -D "?? ??.??.20??"') do call :loop "%%i"
goto :eof
:loop
set /a counter=%Counter%-1
if %counter% LEQ %MaxDirs% (echo %~1 ...%Counter% ^<^= %MaxDirs%....ok, kann bleiben) & goto :eof
echo %~1 ...%Counter% ^> %MaxDirs% ...hau ich wech mit RD *gg
::rd %1 /s /q
goto :eof
::-------end old_save_erase.cmd
Eigentlich tut es genau das was ich möchte, jedoch nur wenn die Anzahl der vorhandenen Verzeichnisse mit der Vorgabe der Variable "counter" übereinstimmt.
Wie kann ich am Begin des Batch die Anzahl der existierenden Verzeichnisse bestimmen? Diese möchte ich dann der Variable "counter" zuweisen.
Wie kann man das zu verwendende Datumsformat einstellen (z.B: 2006/09/24), 20.09.2006 ist "unschön"? Das Systenstandardformat sollte jedoch erhalten (unberührt) bleiben.
THX
flic
PS: Die Links zu den anderen Fragen liefere ich nach.
Hier der Link zu Beitrag Nr. 2: Logfile während Verzeichniskopie erstellen und bei Fehler Aktion auslösen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 40780
Url: https://administrator.de/contentid/40780
Ausgedruckt am: 16.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
Moin flicflac,
willkommen im Forum.
Zur ersten Frage - die vorhandenen Verzeichnisse durchzählen:
..als neue Zeile nach Set /a MaxOldDirs... Das Setzen von Counter in der ersten Zeile kann entfallen.
Zur zweiten Frage (Datumsformatierung) gibt es ein Tutorial "Umgang mit Datums- und Zeitvariablen im Batch" im Bereich "Batch & Shell".
Gruß
Biber
P.S. Ich interpretiere es so, dass unterhalb von j:\datasave einige Verzeichnisse der Form "xx tt.mm.yyyy" liegen? Dann wäre auch die Syntax Deiner DIR-Anweisungen anzupassen:
dir ... j:\datasave\?? ??.??.20??"
willkommen im Forum.
Zur ersten Frage - die vorhandenen Verzeichnisse durchzählen:
for /f %%i in ('dir /Ad "j:\datasave\?? ??.??.20??"^|find "Verzeichnis("') do set /a "counter=%%i"
Zur zweiten Frage (Datumsformatierung) gibt es ein Tutorial "Umgang mit Datums- und Zeitvariablen im Batch" im Bereich "Batch & Shell".
Gruß
Biber
P.S. Ich interpretiere es so, dass unterhalb von j:\datasave einige Verzeichnisse der Form "xx tt.mm.yyyy" liegen? Dann wäre auch die Syntax Deiner DIR-Anweisungen anzupassen:
dir ... j:\datasave\?? ??.??.20??"
...och, dass ist einfach...
Du hast in der unteren DIR-Anweisung stehen:
dir "e:\datasave" -D "??.??.20??"
(warum oben Laufwerk J: und unten E: soll mir ja egal sein ... )
Aber:
Übersetzt wird das Ganze als "liste mir alles aus Verzeichnis e:\datasave UND alles, was "?? ??.20??" heißt... oder irgendwas doppelt gemoppeltes.
Hatte ich im letzten Post schon mal erwähnt.
Richtig wäre:
Dir [Schalter] "e:\datasave\"?? ??.??.20??" [bzw j:\datasave... -das kann ich nicht beurteilen]
wobei [Schalter] = sein sollten:
/Ad (nur Verzeichnisse
/b wie billig
/oD nach Datum (ältere zuerst)
Der Schalter -D (=Dönekens), den Du da drin hast, kann wech.
Gruß
Biber
Du hast in der unteren DIR-Anweisung stehen:
dir "e:\datasave" -D "??.??.20??"
(warum oben Laufwerk J: und unten E: soll mir ja egal sein ... )
Aber:
Übersetzt wird das Ganze als "liste mir alles aus Verzeichnis e:\datasave UND alles, was "?? ??.20??" heißt... oder irgendwas doppelt gemoppeltes.
Hatte ich im letzten Post schon mal erwähnt.
Richtig wäre:
Dir [Schalter] "e:\datasave\"?? ??.??.20??" [bzw j:\datasave... -das kann ich nicht beurteilen]
wobei [Schalter] = sein sollten:
/Ad (nur Verzeichnisse
/b wie billig
/oD nach Datum (ältere zuerst)
Der Schalter -D (=Dönekens), den Du da drin hast, kann wech.
Gruß
Biber
...deshalb auch frühzeitig angewöhnen, alles was an mehr als einer Stelle im Sourcecode auftaucht, in Variablen am Anfang der Datei oder in Konfigdateien zu schreiben oder als Parameter zu übergeben.
Platz genug ist ja im Batch und zu einem Oneliner trimmen werden wir den auch nicht mehr, also was soll der Geiz:
Diese Zeile halt an den Anfang der Datei, dann brauchst Du nur an einer Stelle anpassen.
Ich setz den Beitrag mal auf "gelöst" - ist ok für Dich, denke ich.
Gruß
Biber
Platz genug ist ja im Batch und zu einem Oneliner trimmen werden wir den auch nicht mehr, also was soll der Geiz:
Set srcfiles="j:\datasave\??.??.20??"
...
Ich setz den Beitrag mal auf "gelöst" - ist ok für Dich, denke ich.
Gruß
Biber