Löschvorgang automatisieren
Hallo alle zusammen,
hoffe jemand weiß wie ich folgendes Problem realisieren kann.
Ich hab unter Windows einen Ordner Versionen der bsp. die
Unterordner 1.1, 1.2, 1.3, 1.4, 1.5 beinhaltet.
Wie kann ich realisieren das mir per Skript alle Unterordner außer dem Aktuellsten, in diesem Fall 1.5, gelöscht werden ? Die 5 Unterordner sind vom Ursprung alle gleich alt, so dass man nicht nach dem Erstellungsdatum gehen kann.
Hoffe die Problematik wurde klar...
Greetz
hoffe jemand weiß wie ich folgendes Problem realisieren kann.
Ich hab unter Windows einen Ordner Versionen der bsp. die
Unterordner 1.1, 1.2, 1.3, 1.4, 1.5 beinhaltet.
Wie kann ich realisieren das mir per Skript alle Unterordner außer dem Aktuellsten, in diesem Fall 1.5, gelöscht werden ? Die 5 Unterordner sind vom Ursprung alle gleich alt, so dass man nicht nach dem Erstellungsdatum gehen kann.
Hoffe die Problematik wurde klar...
Greetz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 42037
Url: https://administrator.de/forum/loeschvorgang-automatisieren-42037.html
Ausgedruckt am: 24.12.2024 um 13:12 Uhr
12 Kommentare
Neuester Kommentar
Moin Franzmann,
angenommen, der Parent-Ordner der "Versions-Verzeichnisse" 1.1; 1.2; .... 1.28g; .... 3.9a, 4.00;.. heißt D:\Versionen
und die Namenskonvention für die Versionsverzeichnisse sei "?.*" [eine Stelle vor dem Punkt, beliebige Stellen danach], dann:
Am Prompt:
Das "@ECHO" nach dem erfolgreichen Testen ersatzlos löschen.
Als Batch jeweils zwei %-Zeichen statt ein %-Zeichen.
Gruß
Biber
angenommen, der Parent-Ordner der "Versions-Verzeichnisse" 1.1; 1.2; .... 1.28g; .... 3.9a, 4.00;.. heißt D:\Versionen
und die Namenskonvention für die Versionsverzeichnisse sei "?.*" [eine Stelle vor dem Punkt, beliebige Stellen danach], dann:
Am Prompt:
>for /f "skip=1" %i in ('dir /b /Ad /o-n D:\Versionen\?.*') do @ECHO rd /s /q %i
Das "@ECHO" nach dem erfolgreichen Testen ersatzlos löschen.
Als Batch jeweils zwei %-Zeichen statt ein %-Zeichen.
Gruß
Biber
@Biber
Wie würdest Du bei zusätzlichen (vor dem Punkt) zweistelligen Versionsnummern vorgehen - mit If Exist ??.* alle Einstelligen weg und dann wie gehabt?
Grüße
bastla
Wie würdest Du bei zusätzlichen (vor dem Punkt) zweistelligen Versionsnummern vorgehen - mit If Exist ??.* alle Einstelligen weg und dann wie gehabt?
Grüße
bastla
Hallo Franzmann!
Wenn der oben dargestellte Ordner "D:\Temp" heißt, werden durch die folgende Variante in allen darin befindlichen Ordnern mit 4-stelligen Bezeichnungen die entsprechenden Unterordner gelöscht:
Soll keine Namenskonvention (nur 4-stellig) für die erste Ordnerebene ("A000", ..., "d0002", ...) berücksichtigt werden, so kannst Du "????" durch "*.*" ersetzen und damit alle Ordner in D:\Temp behandeln.
HTH
bastla
Wenn der oben dargestellte Ordner "D:\Temp" heißt, werden durch die folgende Variante in allen darin befindlichen Ordnern mit 4-stelligen Bezeichnungen die entsprechenden Unterordner gelöscht:
REM Nur zur Sicherheit in den richtigen Ordner wechseln ...
cd /d D:\Temp
for /f %a in ('dir /b /Ad ????') do for /f "skip=1" %i in ('dir /b /Ad /o-n %a\?.*') do @echo rd /s /q %a\%i
Soll keine Namenskonvention (nur 4-stellig) für die erste Ordnerebene ("A000", ..., "d0002", ...) berücksichtigt werden, so kannst Du "????" durch "*.*" ersetzen und damit alle Ordner in D:\Temp behandeln.
HTH
bastla
Hm, bastla,
ist kniffelig, weil ich beim DIR-Befehl mit "?"-Jokerzeichen das "Feature" habe, dass ein "?" ja bedeutet:
"Ein beliebiges Zeichen oder keins".
Sprich: wenn ich folgende Verzeichnis-Struktur hätte [alles VOR dem Punkt soll numerisch sein]
[entspricht jetzt der Ausgabe von "dir /s /b d:\temp\test"]
--> dann würde ja die alphatische Sortierung des DIR-Befehls mit Wildcard "??" folgendes liefern:
[alle Beispiele am CMD-Prompt zur Demo]
Wenn also die Anforderung wäre, nur die höchsten n zweistelligen Version(en) zu löschen und auch einstellige "Versions-Verzwichnisse" vorhanden sein können, dann wäre die Mimik.
Fall a) Zweistellige sind vorhanden; alle einstelligen können deshalb ohnehin gelöscht werden:
Zuerst alle einstelligen Versionen löschen. Danach "zweistellige" behandeln:
Fall b) Nur zweistellige Verzeichnisse sollen behandelt werden; einstellige bleiben wie sie sind.
[Zwischenschritt zur Verdeutlichung]
Diesen Output lasse ich mal in einer "inneren" FOR /F-Anweisung erzeugen.
Denn ich will ja davon, von diesem Output, die (gemäß logischer Sortierung) erste Zeile überspringen.
Gruß
Biber
ist kniffelig, weil ich beim DIR-Befehl mit "?"-Jokerzeichen das "Feature" habe, dass ein "?" ja bedeutet:
"Ein beliebiges Zeichen oder keins".
Sprich: wenn ich folgende Verzeichnis-Struktur hätte [alles VOR dem Punkt soll numerisch sein]
d:\temp\test\1.1
d:\temp\test\1.2
d:\temp\test\1.3
d:\temp\test\1.4
d:\temp\test\1.5
d:\temp\test\9.4
d:\temp\test\10.1
d:\temp\test\10.2
d:\temp\test\10.2.3.4
d:\temp\test\10.5
d:\temp\test\10.7
d:\temp\test\10.7.1.3
--> dann würde ja die alphatische Sortierung des DIR-Befehls mit Wildcard "??" folgendes liefern:
[alle Beispiele am CMD-Prompt zur Demo]
>dir /s /b /o-n d:\temp\test\??.*
d:\temp\test\9.4
d:\temp\test\10.7.1.3
d:\temp\test\10.7
d:\temp\test\10.5
d:\temp\test\10.2.3.4
d:\temp\test\10.2
d:\temp\test\10.1
d:\temp\test\1.5
d:\temp\test\1.4
d:\temp\test\1.3
d:\temp\test\1.2
d:\temp\test\1.1
Fall a) Zweistellige sind vorhanden; alle einstelligen können deshalb ohnehin gelöscht werden:
Zuerst alle einstelligen Versionen löschen. Danach "zweistellige" behandeln:
>for /f %i in ('dir /b /Ad /o-n d:\temp\test\?.*') do @rd /s /q d:\temp\test\%i
>for /f "skip=1" %i in ('dir /b /Ad /o-n d:\temp\test\??.*') do @rd /s /q d:\temp\test\%i
Fall b) Nur zweistellige Verzeichnisse sollen behandelt werden; einstellige bleiben wie sie sind.
[Zwischenschritt zur Verdeutlichung]
<b>>for /f "delims=. tokens=1,*" %i in ('dir /s /b /o-n d:\temp\test\??.*') do @if %~nxi GTR 9 @echo %i.%j</b>
d:\temp\test\10.7.1.3
d:\temp\test\10.7
d:\temp\test\10.5
d:\temp\test\10.2.3.4
d:\temp\test\10.2
d:\temp\test\10.1
Denn ich will ja davon, von diesem Output, die (gemäß logischer Sortierung) erste Zeile überspringen.
>for /f "skip=1" %x in ('<b>for /f "delims=. tokens=1,*" %i in ^('dir /s /b /o-n d:\temp\test\??.*'^) do @if %~nxi GTR 9 @echo %i.%j</b>') do @echo rd /s /q d:\temp\test\%x
rd d:\temp\test\d:\temp\test\10.7
rd d:\temp\test\d:\temp\test\10.5
rd d:\temp\test\d:\temp\test\10.2.3.4
rd d:\temp\test\d:\temp\test\10.2
rd d:\temp\test\d:\temp\test\10.1
Gruß
Biber
Hallo Biber!
Was machst Du eigentlich mit dem d:\temp\test\x.* in
(und, ganz nebenbei, kann ich einen Teil eines "Schnipsels" beim Posten - innerhalb eines code-Blocks - mit einer Formatierung irgendwie hervorheben)?
Grüße
bastla
Was machst Du eigentlich mit dem d:\temp\test\x.* in
for /f %i in ('dir /b /Ad /o-n d:\temp\test\?.* d:\temp\test\x.*') do @rd /s /q d:\temp\test\%i
(und, ganz nebenbei, kann ich einen Teil eines "Schnipsels" beim Posten - innerhalb eines code-Blocks - mit einer Formatierung irgendwie hervorheben)?
Grüße
bastla
@bastla
Das hatte ich vergessen zu löschen.. war vom Testen am CMD-Prompt übriggebileben:
.. so hatte ich probiert, was das Ergebnis wäre, wenn ich erst die Ein-, dann die zweistelligen "Versions"-Verzeichnisse abarbeite. Käme aber nur Müll raus.
Dann hatte ich das "??.*" durch "x.*" ersetzt und vergessen.
Ich lösche es oben raus.
Die Formatierung fett zum Beispiel klappt auch innerhalb der Formatierung "Code".
Gruß
Biber
Das hatte ich vergessen zu löschen.. war vom Testen am CMD-Prompt übriggebileben:
for /f %i in ('dir /b /Ad /o-n d:\temp\test\?.* <b>d:\temp\test\??.*</b>') do @rd /s /q d:\temp\test\%i
.. so hatte ich probiert, was das Ergebnis wäre, wenn ich erst die Ein-, dann die zweistelligen "Versions"-Verzeichnisse abarbeite. Käme aber nur Müll raus.
Dann hatte ich das "??.*" durch "x.*" ersetzt und vergessen.
Ich lösche es oben raus.
Die Formatierung fett zum Beispiel klappt auch innerhalb der Formatierung "Code".
Gruß
Biber
@Biber
Na, da bin ich ja beruhigt ...
... und danke für den Formatierungstipp - hatte ich wohl an unpassender Stelle probiert ...
Grüße
bastla
Na, da bin ich ja beruhigt ...
... und danke für den Formatierungstipp - hatte ich wohl an unpassender Stelle probiert ...
Grüße
bastla