Zum Inhalt springen

Windows Batch: Desktop files löschen (mit Ausnahmen)


reptile_

Empfohlene Beiträge

Moin ;)

Ich möchte eine Windows Batch bauen, die sich nach file backup ausführt und sämtliche Dateien (im Unterordner, sowie die Unterordner selbst auch) auf dem Desktop löscht, ausser den Desktop Ordner selbst. Dabei sollen auch Ausnahmen gesetzt werden, dass zb *.lnk / *.db / *.ini nicht gelöscht werden.

Hab auch ein ähnliches Batch script im anderen Forum gefunden, was ich ein wenig umbauen wollte... aber nun hab ich den Pfaden verloren :/

Ich poste am besten einfach mal die Batch soweit wie ich sie Habe und achja ich benutze Windows Vista.

@echo off

rem Verzeichnis, wo die Dateien gelöscht werden sollen

set erasepath="C:\Users\Name\Desktop"


rem auszulassende Dateiendung werden hier gesetzt

set skipfile='*.lnk'

set skipfile1='*.db'

set skipfile2='*.ini'

set skipfile3='dirs.txt'

set skipfile4='del.txt'


rem Zwischendatei, die zu löschende Ordner/Dateien enthällt

set availdirs="C:\Users\Name\Desktop\dirs.txt"

set delfile="C:\Users\Name\Desktop\del.txt"


rem Vorhandene Ordner werden in Datei geschrieben 

dir %erasepath% /a:d /b >> %availdirs%

dir %erasepath% /b >> %delfile%


rem Alles löschen ausser skipfile-skipfile4

for /f %%a IN (%delfile%) DO IF NOT '%%a' == %skipfile% del %erasepath%%%a
So eigentlich hängen tue ich bei dem "for-Befehl" und zwar soll der quasi so aussehen:
for /f %%a IN (%delfile%) DO IF NOT '%%a' == %skipfile%,%skipfile1%,%skipfile2%,%skipfile3%,%skipfile4% del %erasepath%%%a

Ich weiss das funktioniert so nicht, nur damit ihr wisst was ich meine ;) Ausserdem weiss ich auch nicht, ob ich danach noch ein Befehl setzen muss, um die restlichen Unterordner zulöschen.

Währe schön wenn mir jemand helfen könnte, oder vielleicht verbesserungs vorschlag hat.

Grüße

P.S.: Wünsche euch ein Guten Rutsch ins neue Jahr ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

[...] IF NOT '%%a' == %skipfile% [...]

so wie das da steht wird des nicht funktionieren.

Du vergleichst "dateiname.txt" mit "*.txt".

Du musst den for-befehl anpassen, um zum vergleich die Dateiendung zu haben. Hier ein Beispiel:


for /f "tokens=1,2 delims=." %i IN (dateien.txt) do @echo %j %i / %i.%j

dateien.txt habe ich erstellt mit

dir /b >> dateien.txt

Zum verknüpfen deiner Ausschlüsse kannst Du im do-Bereich der for-Schleife einen Verschachtelten If-Block verwenden:

for ... do if not '%j' == '%skipfile%' (

                      if not '%j' == '%skipfile1%' (

                           @echo Lösche Datei %i !!

                      ) ELSE (

                           @echo %i Datei nicht löschen.

             ) ELSE (

                      @echo Verschone %i Datei vor dem löschen.

             )


Sieht ein wenig kompliziert aus aber so ist das eben :)

eine Komplettlösung gibt's es nur selten ;)

Falls Du noch Informationen zum einem Befehl brauchst gib in der Konsole

einfach /? ein.

Für weitere Hilfe zum dir-Befehl => dir /?

Für weitere Hilfe zum for-Befehl => for /?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jo danke schonmal für die hilfe :) Irgendwie geht das immernoch nicht so wie ich will und kann mit dem Fehler nichts anfangen. (Wenn Windows wenigstens die "fehlerzeile" anzeigen würde)

DAs Script sieht nun wie folgt aus:

@echo off

rem Verzeichnis, indem Dateien gelöscht werden sollen

set delpath="C:\Users\Name\Desktop"


rem skipfiles werden hier angegeben

set skipfile1='*.lnk'

set skipfile2='*.db'

set skipfile3='*.ini'

set skipfile4='files.txt'


rem Zwischendatei, die Dateien enthällt

set delfile="C:\Users\Name\Desktop\files.txt"


rem Dateien werden in Datei geschrieben 

dir %delpath% /b >> %delfile%


rem in Dateiendungen auflösen

for /f "tokens=1,2 delims=." %i in (%delfile%) do @echo %j %i / %i.%j


rem Alles löschen ausser skipfile1-skipfile4

for %j in (%delfile%) do if not '%j' == '%skipfile%' (

					if not '%j' == '%skipfile1%' (

					if not '%j' == '%skipfile2%' (

					if not '%j' == '%skipfile3%' (

					if not '%j' == '%skipfile4%' (

						@echo Lösche Datei %i !!

					) else (

						@echo %i Datei nicht löschen.

				) else (

					@echo Verschone %i Datei vor dem löschen.

				)
Als fehler krieg ich zurück:
"delfilej" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Kann ich eigentlich im for-Befehl annstat ' auch " setzen, oder gibs da ne regelung ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

[...]

@echo off

[...]

for /f "tokens=1,2 delims=." %i in (%delfile%) do @echo %j %i / %i.%j

[...]

Du weißt schon was der Befehl da macht?

[...]

Kann ich eigentlich im for-Befehl annstat ' auch " setzen, oder gibs da ne regelung ?

Kommt darauf an, für Dateinamen gibt es in der Hilfe folgenden Text zu finden:

[...] Dateinamen, die Leerzeichen enthalten, müssen Sie innerhalb doppelter Anführungszeichen angeben. Dazu müssen Sie die Option "usebackq" verwenden. Andernfalls werden doppelte Anführungszeichen zur Definition eines auszuwertenden Literals verwendet. [...]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat:

Zitat von reptile_ Beitrag anzeigen

[...]

Kann ich eigentlich im for-Befehl annstat ' auch " setzen, oder gibs da ne regelung ?

Kommt darauf an, für Dateinamen gibt es in der Hilfe folgenden Text zu finden:

Zitat:

Zitat von for /?

[...] Dateinamen, die Leerzeichen enthalten, müssen Sie innerhalb doppelter Anführungszeichen angeben. Dazu müssen Sie die Option "usebackq" verwenden. Andernfalls werden doppelte Anführungszeichen zur Definition eines auszuwertenden Literals verwendet. [...]

Ah ok,danke

Zitat:

Zitat von reptile_ Beitrag anzeigen

[...]

Code:

@echo off

[...]

for /f "tokens=1,2 delims=." %i in (%delfile%) do @echo %j %i / %i.%j

[...]

Du weißt schon was der Befehl da macht?

Nicht wirklich, die hilfe für for ist einfach viel zu viel input und wenn ich mir die Zeile mit token durchlese, kommt vorne die hilfe rein und Bahnhof wieder raus. Ich denke ich lass das lieber bevor ich was kaputt mache :D Ich hab einfach null erfahrung damit.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

da wir anscheinend so nicht weiterkommen hab ich mich entschlossen - nur weil ich Zeit und Lust hatte - Dir eine Komplettlösung zu geben:

Hinweis: Verwenden des Skiptes ohne Gewähr und auf eigene Gefahr.

Auf meinem System hat es mit einem Testordner sehr gut funktioniert.


@echo off

echo.

echo == BEREINIGEN EINES ORDNERS ==


rem Mehr Output

rem [true] = Ausgabe zusätzlicher Zeilen

rem [false] = Minimale Ausgabe

set debugmode=false


rem Verzeichnis in welchem die Dateien geloescht werden sollen

set delpath=C:\Users\Name\Desktop


rem Benutzerdefiniert Ausnahmen festlegen (Dateierweiterung)

set skipfile1=lnk

set skipfile2=db

set skipfile3=ini


@echo.

@echo Dateien loeschen...

for /f "usebackq tokens=1,2 delims=." %%a in (`dir %delpath% /a:-d /b`) do (       

       if '%debugmode%' == 'true' ( 

              @echo "[----------------------------------------]"

              @echo Pruefe: '%delpath%\%%a.%%b' [Endung: %%b] 

       )

       if not '%%b' == '%skipfile1%' (

              if not '%%b' == '%skipfile2%' (

                     if not '%%b' == '%skipfile3%' (

                            @echo [LOESCHEN] '%delpath%\%%a.%%b'

[COLOR="DarkRed"]rem                            Entferne REM vor erase zum ENTGÜLTIGEN löschen 

rem                            erase %delpath%\%%a.%%%b[/COLOR]

                     ) ELSE (

                            if '%debugmode%' == 'true' (

                                   @echo [IGNORE] Dateiendung [%skipfile3%]

                                                     )

                            )

              ) ELSE (

                     if '%debugmode%' == 'true' (

                            @echo [IGNORE] Dateiendung [%skipfile2%]

                                              )

                     )

       ) ELSE (

               if '%debugmode%' == 'true' (

                     @echo [IGNORE] Dateiendung [%skipfile1%]

                                        )

              )

)


rem Setvariablen aufloesen

set delpath=

set debugmode=

set skipfile1=

set skipfile2=

set skipfile3=


echo.

echo ABGESCHLOSSEN !

Über Start->Ausführen->CMD öffnen und cleanup.bat starten.

Möchtest Du die Ausgabe als Log-File haben mach folgendes: cleanup.bat >> cleanup.output.txt

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...