JasonLief Geschrieben 27. Mai 2010 Geschrieben 27. Mai 2010 (bearbeitet) Hallo Board-Users Ich habe 'ne Frage und zwar will ich ein Batch-File schreiben, welches mir Dateien löscht. Das ganze sieht wie folgt aus. Ich habe in mehreren Ordner Files, mit speziellen Endungen. Ordner - File1.xml.abc - File2.xml.def - File3.xml.ghi jetzt will ich ein File schreiben, wo ich definiere wo die Files zu finden sind(mit dynamischen Pfaden) und die Befehle welche die Dateien löscht. und in einem anderen File, welche Dateitypen gelöscht werden müssen, welches dann das andere aufruft und einen Parameter übergibt. Also sollte ich dann nur noch dieses File aufrufen müssen, und dies gibt nacher z.B abc mit Hoffe es hat sich alles geklärt, sonst fragt bitte. Kann mir jemand sagen, wie ich dies lösen kann :confused: Danke für die folgenden Antworten Bearbeitet 27. Mai 2010 von JasonLief zusätzliche bitte Zitieren
lupo49 Geschrieben 27. Mai 2010 Geschrieben 27. Mai 2010 Sehr verwirrend die Beschreibung. Hast du schon Ansätze für dein Problem? Zitieren
Grevier Geschrieben 28. Mai 2010 Geschrieben 28. Mai 2010 wenn du eine bat datei mit einem Paratmeter aufrufst, zum Beispiel: ofen.bat insertcookie dann kannst du in der ofen.bat mit %1 auf diesen Parameter zugreifen. Und auf jeden weiteren mit %2, %3 ... ... Zitieren
JasonLief Geschrieben 31. Mai 2010 Autor Geschrieben 31. Mai 2010 wenn du eine bat datei mit einem Paratmeter aufrufst, zum Beispiel: ofen.bat insertcookie dann kannst du in der ofen.bat mit %1 auf diesen Parameter zugreifen. Und auf jeden weiteren mit %2, %3 ... ... Danke danke Jetzt noch eine Frage Ich will ein Loop machen, welcher nachschaut ob der Filename einen solchen parameter beinhaltet. Also irgendwie: If not Dateiname= %1*.* dann löschen Danke für die Antworten Zitieren
lupo49 Geschrieben 31. Mai 2010 Geschrieben 31. Mai 2010 Du kannst ein einfaches dir /B %1% in deine Batchdatei einbauen und dann die Variable %errorlevel% überprüfen. Die dir dann darüber Auskunft gibt, ob Dateien vorhanden sind (Wert von %errorlevel% ist 0) oder eben nicht (Wert gleich 1). Zitieren
JasonLief Geschrieben 31. Mai 2010 Autor Geschrieben 31. Mai 2010 Du kannst ein einfaches dir /B %1% in deine Batchdatei einbauen und dann die Variable %errorlevel% überprüfen. Die dir dann darüber Auskunft gibt, ob Dateien vorhanden sind (Wert von %errorlevel% ist 0) oder eben nicht (Wert gleich 1). ich weiss das Dateien vorhanden sind. nur muss ich wissen wie kann ich dateien löschen mit ausnahme. also z.B Ordner: Abc.xls test.xls testblabla.exe Alle dateien löschen ausser die dateien die test enthalten :confused: Zitieren
lupo49 Geschrieben 31. Mai 2010 Geschrieben 31. Mai 2010 Bau dir eine Schleife, dir für jede zu löschende Datei überprüft, ob diese nicht in der Ausnahmenliste steht. Fuer jede Datei in C:\ DateiLoeschen = true Fuer jeden Dateinamen in C:\ausnahmeliste.txt Wenn Datei gleich Dateinamen DateiLoeschen = false Setze Dateinamen auf naechsten Dateinamen Wenn DateiLoeschen == true dann Datei löschen Setze Datei auf naechste Datei So in der Art... Zitieren
JasonLief Geschrieben 31. Mai 2010 Autor Geschrieben 31. Mai 2010 Bau dir eine Schleife, dir für jede zu löschende Datei überprüft, ob diese nicht in der Ausnahmenliste steht. Fuer jede Datei in C:\ DateiLoeschen = true Fuer jeden Dateinamen in C:\ausnahmeliste.txt Wenn Datei gleich Dateinamen DateiLoeschen = false Setze Dateinamen auf naechsten Dateinamen Wenn DateiLoeschen == true dann Datei löschen Setze Datei auf naechste Datei So in der Art... ja genau, bräuchte nur ein wenig hilfe dabei, weil ich ziemlich wenig ahnug habe von Batch :S habe ein beispiel script, aber mit den variabeln und "\b" oder ":" blick ich nicht so ganz durch Zitieren
JasonLief Geschrieben 1. Juni 2010 Autor Geschrieben 1. Juni 2010 @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 delpathLayout=..\ rem nicht zulöschende Files definieren set skipfile1=%1 set skipfile2= set skipfile3= @echo. @echo Dateien loeschen... for /f "usebackq tokens=1,2 delims=." %%a in (`dir %delpathLayout% /a:-d /b`) do ( if '%debugmode%' == 'true' ( @echo "[----------------------------------------]" @echo Pruefe: '%delpathLayout%\%%a.%%b' [Endung: %%b] ) if not '%%b' == '%skipfile1%' ( if not '%%b' == '%skipfile2%' ( if not '%%b' == '%skipfile3%' ( @echo [LOESCHEN] '%delpathLayout%\%%a.%%b' Entferne REM vor erase zum ENTGÜLTIGEN löschen erase %delpathLayout%\%%a.%%%b ) 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 delpathLayout= set debugmode= set skipfile1= set skipfile2= set skipfile3= echo. echo ABGESCHLOSSEN ! das mit diesen "%" kapier ich ned so ganz, und: for /f "usebackq tokens=1,2 delims=." %%a in (`dir %delpathLayout% /a:-d /b`) do ( Zitieren
JasonLief Geschrieben 1. Juni 2010 Autor Geschrieben 1. Juni 2010 es geht eigentlich nur um den loop Zitieren
lupo49 Geschrieben 1. Juni 2010 Geschrieben 1. Juni 2010 Die Schleife spaltet die Dateien aus dem dir-Befehl in den eigentlichen Dateinamen (%a) und die Dateiendung auf (% auf. In der Schleife wird dann geschaut, ob die Dateiendung von der aktuellen Datei als "skipfile" deklariert wurde. Wenn das der Fall ist, wird die Datei nicht gelöscht. Zitieren
JasonLief Geschrieben 1. Juni 2010 Autor Geschrieben 1. Juni 2010 ok, danke ich werde es mal versuchen Zitieren
JasonLief Geschrieben 1. Juni 2010 Autor Geschrieben 1. Juni 2010 nein. hat sich geklärt! Aber noch die letzte Frage: Ich habe eine Datei xyz.xml.abc Ich will nun das abc auslesen, sprich die 2. Endung. Wie kann ich das? Zitieren
lupo49 Geschrieben 1. Juni 2010 Geschrieben 1. Juni 2010 Die Token in der FOR-Schleife anpassen. for /f "usebackq tokens=1,2,3 delims=." %%a in (`dir %delpathLayout% /a:-d /b`) do ... %%a ist der Dateiname %%b die Zeichenkette nach dem ersten Punkt %%c die eigentliche Dateiendung Zitieren
JasonLief Geschrieben 21. Juni 2010 Autor Geschrieben 21. Juni 2010 Ich sollte nun auch noch ordner löschen, aber mit dem loop: for /f "usebackq tokens=1,2,3 delims=." %%a in (`dir %delpathLayout% /a:-d /b`) do ... kann ich die ordner nicht ansprechen oder auslesen. Wie kann ich nun ein directory, bei welchem ich ordner löschen muss, die ansprechen? Also: If not [ordnername] == nichtzulöschender Ordner ( lösche [ordnername] ) Zitieren
lupo49 Geschrieben 21. Juni 2010 Geschrieben 21. Juni 2010 Weil der Befehlsparameter "/a:-d" angibt, dass keine Verzeichnisse aufgelistet werden bzw. in %%a geschrieben werden sollen. Zitieren
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.