Delphi-PRAXiS
Seite 3 von 4     123 4      

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 21:52

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

Zitat von Dalai (Beitrag 1432769)
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

Das zweite Verzeichnis im Dir hast Du mit Post Nr. #4 eingeführt. Seit dem schleppt sich das irgendwie mit durch, obwohl es syntaktisch eher grenzwertig ist.

Noch ein Versuch ohne die überflüssige Klammerung für die Kommandozeile:
Code:
for /F "skip=1 delims=" %F IN ('dir /B /AD-r-s-h /O-D "%BACKUPDIR%\*-*-* *-*" 2^>NUL') DO echo rmdir /S /Q "%BACKUPDIR%\%F"
Der Dir-Befehl verlangt keine zwei Parameter, das %BACKUPDIR% hinter dem Pattern für die Verzeichnisnamen ist kontraproduktiv.

Luckie 21. Mai 2019 21:56

AW: Batchscript zum automatischen Löschen von Dateien
 
Keine Ausgabe 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-S /O-N "%BACKUPDIR%\*-*-* *-*" 2^>NUL') DO (
    echo rmdir /S /Q "%BACKUPDIR%\%%F"
)

pause

Dalai 21. Mai 2019 22:00

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

Zitat von Delphi.Narium (Beitrag 1432777)
Das zweite Verzeichnis im Dir hast Du mit Post Nr. #4 eingeführt.

Wo ist da ein zweites Verzeichnis? Kommando dir, danach ein paar Switches dafür und danach das BACKUPDIR. Dann Fehlerumleitung samt notwendigem Escaping.

Zitat:

ohne die überflüssige Klammerung für die Kommandozeile
Bei einem einzelnen Befehl wie hier mag sie überflüssig sein, aber sobald man weitere Befehle hinzufügen will, und sei es nur für die Ausgabe, ist die Klammerung notwendig. Zudem finde ich es mit Klammerung viel einfacher zu lesen.

Zitat:

Der Dir-Befehl verlangt keine zwei Parameter, das %BACKUPDIR% hinter dem Pattern für die Verzeichnisnamen ist kontraproduktiv.
Sag ich ja. Aber ich hab an keiner Stelle mehrere Verzeichnisse angegeben gehabt.


Zitat:

Zitat von Luckie (Beitrag 1432779)
Keine Ausgabe mit

Du musst dir die Attribute der Verzeichnisse genau anschauen und die dir-Schalter entsprechend anpassen.

Grüße
Dalai

Delphi.Narium 21. Mai 2019 22:01

AW: Batchscript zum automatischen Löschen von Dateien
 
Ergebnis Kommandozeile ohne Klammerung?

Luckie 21. Mai 2019 22:04

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

Code:
@echo off
set RETAINBACKUPS=2
set BACKUPDIR=D:\
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-S /O-N "*" 2^>NUL') DO (
    echo rmdir /S /Q "%BACKUPDIR%\%%F"
)

pause
So funktioniert es.

Delphi.Narium 21. Mai 2019 22:10

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

Zitat von Dalai (Beitrag 1432780)
Zitat:

Zitat von Delphi.Narium (Beitrag 1432777)
Das zweite Verzeichnis im Dir hast Du mit Post Nr. #4 eingeführt.

Wo ist da ein zweites Verzeichnis? Kommando dir, danach ein paar Switches dafür und danach das BACKUPDIR. Dann Fehlerumleitung samt notwendigem Escaping.

Oohh, Mist, Du hast recht, sollte wohl mal meine Brille putzen und nicht immer nur das lesen, von dem ich meine das es irgendwo steht, sondern nur das, was da wirklich steht.

Zitat:

Zitat von Dalai (Beitrag 1432780)
Zitat:

ohne die überflüssige Klammerung für die Kommandozeile
Bei einem einzelnen Befehl wie hier mag sie überflüssig sein, aber sobald man weitere Befehle hinzufügen will, und sei es nur für die Ausgabe, ist die Klammerung notwendig. Zudem finde ich es mit Klammerung viel einfacher zu lesen.

Prinzipiell hast Du ja recht, aber auf der Kommandozeile ist das halt schwer testbar. Wenn was in 'ner Batchdatei nicht so funktioniert, probier' ich das alles einzeln auf der Kommandozeile. In der Batchdatei kann man es dann in der Klammerung zusammenfassen.

Zitat:

Zitat von Dalai (Beitrag 1432780)
Zitat:

Der Dir-Befehl verlangt keine zwei Parameter, das %BACKUPDIR% hinter dem Pattern für die Verzeichnisnamen ist kontraproduktiv.
Sag ich ja. Aber ich hab an keiner Stelle mehrere Verzeichnisse angegeben gehabt.

Sorry, da hab' ich irgendwie vollkommen falsch geguckt.

Dalai 21. Mai 2019 22:15

AW: Batchscript zum automatischen Löschen von Dateien
 
Ja, man kann auch ein
Code:
cd /D "%BACKUPDIR%"
vorneweg machen, aber trotzdem funktioniert es nach meinen Tests auch, das Pattern direkt an das dir-Kommando zu geben.

Vielleicht war das Wegfiltern der Fehler für die Tests doch nicht so gut? Andererseits lässt sich ja das dir-Kommando auch so auf die CMD kopieren und einzeln testen (dann sinnvollerweise ohne Umleitung von StdError) ...

Grüße
Dalai

Luckie 21. Mai 2019 22:20

AW: Batchscript zum automatischen Löschen von Dateien
 
Egal. Jetzt funktioniert es jedenfalls.

Vielen Dank für eure Hilfe.

Dalai 22. Mai 2019 03:40

AW: Batchscript zum automatischen Löschen von Dateien
 
Auf eine Sache möchte ich in Bezug auf das fehlende bzw. breit gefasste Pattern noch hinweisen: Damit werden alle Verzeichnisse ausgegeben, nicht nur die automatisch erstellten Backupverzeichnisse. Achte also darauf, dass dort keine anderen Dinge rumliegen, sonst wunderst du dich, wenn auf einmal Verzeichnisse bzw. ganze Strukturen verschwinden. Auch deshalb ist es besser, sowohl ein Pattern anzugeben, als auch in ein Verzeichnis zu sichern, das ausschließlich für Backups gedacht ist (und sonst nichts rumgeschrieben wird).

Zitat:

Prinzipiell hast Du ja recht, aber auf der Kommandozeile ist das halt schwer testbar.
Wieso? Auch auf diese Art geklammerte Bereiche lassen sich exakt so in die CMD einfügen. Man muss nur darauf achten, die doppelten Prozentzeichen von for-Schleifen u.ä. in einfache zu wandeln, das war's. Klammern stören nicht, ganz im Gegenteil: Wenn eine öffnende Klammer eingegeben wird, weist die CMD darauf hin mit dem "Mehr?", dass man die Eingabe fortsetzen kann/soll, bis zur schließenden Klammer.

Grüße
Dalai

Luckie 22. Mai 2019 04:20

AW: Batchscript zum automatischen Löschen von Dateien
 
Das ist schon in Ordnung. Auf dem Laufwerk kommen nur Backups. Sie hat auch die Bezeichnung "Backup". Da noch mal einen Unterordner "Backup" anzulegen wäre unsinnig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr.
Seite 3 von 4     123 4      

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