reptile_ Geschrieben 31. Dezember 2008 Teilen Geschrieben 31. Dezember 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 1. Januar 2009 Teilen Geschrieben 1. Januar 2009 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 /? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
reptile_ Geschrieben 1. Januar 2009 Autor Teilen Geschrieben 1. Januar 2009 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 ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 1. Januar 2009 Teilen Geschrieben 1. Januar 2009 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. [...] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
reptile_ Geschrieben 1. Januar 2009 Autor Teilen Geschrieben 1. Januar 2009 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 Ich hab einfach null erfahrung damit. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 2. Januar 2009 Teilen Geschrieben 2. Januar 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
reptile_ Geschrieben 2. Januar 2009 Autor Teilen Geschrieben 2. Januar 2009 oh, great! Großes Dankeschön funktioniert einwandtfrei! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.