Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Batchscript zum automatischen Löschen von Dateien (https://www.delphipraxis.net/200747-batchscript-zum-automatischen-loeschen-von-dateien.html)

Delphi.Narium 21. Mai 2019 19:26

AW: Batchscript zum automatischen Löschen von Dateien
 
Deine Verzeichnisse fangen doch alle irgendwie mit 2 an (Jahreszahl).

Ergänze mal das Dir um 2*.*, damit die anderen Verzeichnisse nicht mit ausgegeben werden, davon willst Du ja auch (höchstwahrscheinlich) nix löschen.

Ein im realen Leben ausgeführtes
Code:
rmdir /S /Q "D:\\System Volume Information"
käme vermutlich nicht so gut :-(

Eventuell
Code:
@echo off
rem Anzahl der Verzeichnisse, die uebrig bleiben sollen?
set RETAINBACKUPS=15
rem ohne Backslash am Ende, der wird später mit den Verzeichnisnamen angehängt.
set BACKUPDIR=D:

if not exist "%BACKUPDIR%" (
    echo.
    echo "%BACKUPDIR%" existiert nicht.
    echo.
    pause
    goto :EOF
)

pause

for /F "skip=%RETAINBACKUPS% delims=" %%F IN ('dir /B /AD-r-s-h /O-D 2*.* "%BACKUPDIR%" 2^>NUL') DO (
    echo rmdir /S /Q "%BACKUPDIR%\%%F"
)

pause

rem freien Speicherplatz anzeigen
rem for /f "tokens=3" %%i in ('dir /-c^|findstr /c:"Bytes frei"') do set tmp=%%i
rem echo Freier Speicherplatz auf Laufwerk D: %tmp:~0,3% GB

pause

Dalai 21. Mai 2019 19:31

AW: Batchscript zum automatischen Löschen von Dateien
 
Backup im Root eines Laufwerks hatte ich auch noch nicht. Das sollte recht einfach zu beheben sein, wenn du die Syntax deiner Verzeichnisse mit einbeziehst:
Code:
... IN ('dir /B /AD /O-D "%BACKUPDIR%\*-*-* *-*" 2^>NUL') ...
Übrigens lässt sich "System Volume Information" nur mit SYSTEM-Rechten betreten und daher auch mit Adminrechte nicht löschen. Nichtsdestotrotz ist es natürlich besser, wenn das erst gar nicht beachtet wird.

Grüße
Dalai

Luckie 21. Mai 2019 19:32

AW: Batchscript zum automatischen Löschen von Dateien
 
Ausgangssituation:
Code:
2019-05-10 13-41
2019-05-18 13-41
2019-05-21 13-41
Mit
Code:
@echo off
set RETAINBACKUPS=1
set BACKUPDIR=D:\

if not exist "%BACKUPDIR%" (
    echo.
    echo "%BACKUPDIR%" existiert nicht.
    echo.
    pause
    goto :EOF
)

rem freien Speicherplatz anzeigen
for /f "tokens=3" %%i in ('dir /-c^|findstr /c:"Bytes frei"') do set tmp=%%i
echo Freier Speicherplatz auf Laufwerk D: %tmp:~0,3% GB
echo.

rem alte Backups loeschen
choice /M "Alte Sicherung(en) loeschen?" /C JN
if %ERRORLEVEL% == 1 goto DEL_OLDEST
if %ERRORLEVEL% == 2 goto DO_BACKUP

:DEL_OlDEST
echo Loesche alte Sicherungen...
echo.

for /F "skip=%RETAINBACKUPS% delims=" %%F IN ('dir /B /AD-r-s-h /O-D 2*.* "%BACKUPDIR%" 2^>NUL') DO (
    echo rmdir /S /Q "%BACKUPDIR%\%%F"
)

pause
...bekomme ich:
Code:
Freier Speicherplatz auf Laufwerk D: 833 GB

Alte Sicherung(en) loeschen? [J,N]?J
Loesche alte Sicherungen...

rmdir /S /Q "D:\\2019-05-18 13-41"
rmdir /S /Q "D:\\2019-05-10 13-41"
rmdir /S /Q "D:\\2019-05-10 13-41"
rmdir /S /Q "D:\\2019-05-21 13-41"
rmdir /S /Q "D:\\2019-05-21 13-41"
Drücken Sie eine beliebige Taste . . .
Ächtz.

Er soll fünf behalten, es sind drei vorhanden und er will die neuste Sicherung zwei mal löschen.

Dalai 21. Mai 2019 20:31

AW: Batchscript zum automatischen Löschen von Dateien
 
Weiß nicht, ob mein Beitrag von 20:31 übersehen wurde. Mit dem dort gegebenen Pattern sollte es klappen.

Grüße
Dalai

Delphi.Narium 21. Mai 2019 21:13

AW: Batchscript zum automatischen Löschen von Dateien
 
Das Problem scheint aber nicht das Pattern zu sein, sondern die doppelte Aufführung der Verzeichnisse im Dir-Ergebnis.

Es werden alle Verzeichnisse zwei mal ausgegeben und davon wird dann das Erste übersprungen.

3 Verzeichnisse * 2 = 6 minus dem 1. = 5 Verzeichnisse in der Ausgabe.

Wie sieht das Ergebnis von
Code:
for /F "skip=%RETAINBACKUPS% delims=" %F IN ('dir /B /AD-r-s-h /O-D "%BACKUPDIR%\2???-??-?? ??-??"') DO echo rmdir /S /Q "%BACKUPDIR%\%F"
auf der Kommandozeile aus?

Dalai 21. Mai 2019 21:16

AW: Batchscript zum automatischen Löschen von Dateien
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1432768)
Das Problem scheint aber nicht das Pattern zu sein, sondern die doppelte Aufführung der Verzeichnisse im Dir-Ergebnis.

Was aber nur mit deinem Befehl passiert, weil du dem dir-Kommando zwei Verzeichnisse übergibst. Wenn es das erste nicht gibt, kommt stattdessen "Datei nicht gefunden" als Fehlermeldung (die dann vom 2>NUL geschluckt wird).

Grüße
Dalai

Luckie 21. Mai 2019 21:18

AW: Batchscript zum automatischen Löschen von Dateien
 
Erst muss ich mein Windows wieder zu Laufen bringen. Nach einem Windows Update ist er bei der Konfiguration des Updates hängen geblieben.

Luckie 21. Mai 2019 21:23

AW: Batchscript zum automatischen Löschen von Dateien
 
Mit
Code:
for /F "skip=%RETAINBACKUPS% delims=" %%F IN ('dir /B /AD-r-s-h /O-D *-*-* *-* "%BACKUPDIR%" 2^>NUL') DO (
    echo rmdir /S /Q "%BACKUPDIR%\%%F"
)
bekomme ich:
Code:
Alte Sicherung(en) loeschen? [J,N]?J
Loesche alte Sicherungen...

rmdir /S /Q "D:\\2019-05-18 13-41"
rmdir /S /Q "D:\\2019-05-18 13-41"
rmdir /S /Q "D:\\2019-05-10 13-41"
rmdir /S /Q "D:\\2019-05-10 13-41"
rmdir /S /Q "D:\\2019-05-10 13-41"
rmdir /S /Q "D:\\2019-05-21 13-41"
rmdir /S /Q "D:\\2019-05-21 13-41"
rmdir /S /Q "D:\\2019-05-21 13-41"
Drücken Sie eine beliebige Taste . . .
bei: set RETAINBACKUPS=1

Mit 2???-??-?? ??-?? findet er gar nichts.

Dalai 21. Mai 2019 21:48

AW: Batchscript zum automatischen Löschen von Dateien
 
Deswegen schrieb ich ja das Pattern hinter das %BACKUPDIR%. Siehe Beitrag #12.

Grüße
Dalai

Luckie 21. Mai 2019 21:49

AW: Batchscript zum automatischen Löschen von Dateien
 
Autsch. Ganz übersehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz