batch datei auf knopfdruck
Moderators: Hacker, Stefan2, white
batch datei auf knopfdruck
ich habe sehr oft die gleiche aufgabe:
im pfad des aktiven panels und in allen unterverzeichnissen:
1. lösche alle dateien mit bestimmten erweiterungen (z.b. *.htm *.gif *.exe).
2. lösche dann alle dateien die kleiner sind als z.b. 100kB.
3. lösche dann alle leeren verzeichnisse
4. ersetzte alle '-' in den namen mit '_'
bis jetzt mache ich (1), (2) und (4) im TC mit der find funktion und dem multirename tool und (3) mehr oder weniger von hand.
ich suche eine möglichkeit im TC diese schritte automatisch auszuführen.
am besten wär wohl eine .bat datei die das erledigt.
insbesondere sollte die .bat datei nicht jedes mal ins akutelle verzeichnis kopiert werden müssen, sondern von einem fixen installationspfad aus die dateien im aktiven panel im TC löschen.
irgendwelche konkreten tipps?
danke,
rudi
im pfad des aktiven panels und in allen unterverzeichnissen:
1. lösche alle dateien mit bestimmten erweiterungen (z.b. *.htm *.gif *.exe).
2. lösche dann alle dateien die kleiner sind als z.b. 100kB.
3. lösche dann alle leeren verzeichnisse
4. ersetzte alle '-' in den namen mit '_'
bis jetzt mache ich (1), (2) und (4) im TC mit der find funktion und dem multirename tool und (3) mehr oder weniger von hand.
ich suche eine möglichkeit im TC diese schritte automatisch auszuführen.
am besten wär wohl eine .bat datei die das erledigt.
insbesondere sollte die .bat datei nicht jedes mal ins akutelle verzeichnis kopiert werden müssen, sondern von einem fixen installationspfad aus die dateien im aktiven panel im TC löschen.
irgendwelche konkreten tipps?
danke,
rudi
Hallo!
Punkt 1 lässt sich problemlos als Batch realisieren. Die anderen 3 Punkte leider nicht, da in DOS dafür keine Befehle vorgesehen sind.
Mit RD lassen sich zwar leere Verzeichnisse entfernen, aber der Beschreibung nach tippe ich mal darauf, das die Namen der zu entfernenden Verzeichnisse variieren. Und die zu löschen, wäre mit dem Befehl nicht möglich.
Punkt 1 lässt sich problemlos als Batch realisieren. Die anderen 3 Punkte leider nicht, da in DOS dafür keine Befehle vorgesehen sind.
Mit RD lassen sich zwar leere Verzeichnisse entfernen, aber der Beschreibung nach tippe ich mal darauf, das die Namen der zu entfernenden Verzeichnisse variieren. Und die zu löschen, wäre mit dem Befehl nicht möglich.
Gruß,
Christian
Christian
Wg. Punkt 4 sieh mal bitte hier .
icfu hat einen Link auf ein kleines Tool gesetzt, das das umbenennen erledigt. Das könntest Du von der Batch aus aufrufen. Beachte bitte die unterschiedliche Zeichenkonvertierung unter Windows und DOS, auf die icfu hinweist. Mache auf jeden Fall vorher Tests, damit Dir keine Dateien vermurkst werden.
Außerdem solltest Du die Nr. 2 mit dem For befehl lösen können
for /f "tokens=1,2,3,4" %%i in ('dir') do if %%k LSS 100000 (@echo del %%l >>löschen.bat)
So ungefähr, sieh dir mal die Hilfe zu for und zu batches an.
In meiner Zeile wird das Ergebnis des Dir Befehls in die Variablen %i %j %k %l eingelesen, wobei das Trennzeichen das Leerzeichen ist. Und wenn die dritte Variable (Größe) größer als 100000 (Bytes) ist, dann wird %l -der Dateiname- zusammen mit dem del Befehl in eine Batch namens löschen.bat geschrieben, die anschließend ausgeführt werden muß . Außerdem muß sie danach (oder als erstes ) gelöscht werden.
Das ist der Ansatz, evtl mußt Du noch vorher das <DIR> ausfiltern, bzw kannst Du so die Namen der Verzeichnisse herausfinden, die Du mit 'rd' löschen willst. Das wäre insofern kein Problem, als sich nur leere Verzeichnisse löschen lassen. Allerdings sind auch verzeichnisse mit leeren Unterverzeichnissen nicht leer
Wenn Du eine schöne (funktionierende) batch hinbekommen hast, kannst Du sie ja posten.
sheepdog
icfu hat einen Link auf ein kleines Tool gesetzt, das das umbenennen erledigt. Das könntest Du von der Batch aus aufrufen. Beachte bitte die unterschiedliche Zeichenkonvertierung unter Windows und DOS, auf die icfu hinweist. Mache auf jeden Fall vorher Tests, damit Dir keine Dateien vermurkst werden.
Außerdem solltest Du die Nr. 2 mit dem For befehl lösen können
for /f "tokens=1,2,3,4" %%i in ('dir') do if %%k LSS 100000 (@echo del %%l >>löschen.bat)
So ungefähr, sieh dir mal die Hilfe zu for und zu batches an.
In meiner Zeile wird das Ergebnis des Dir Befehls in die Variablen %i %j %k %l eingelesen, wobei das Trennzeichen das Leerzeichen ist. Und wenn die dritte Variable (Größe) größer als 100000 (Bytes) ist, dann wird %l -der Dateiname- zusammen mit dem del Befehl in eine Batch namens löschen.bat geschrieben, die anschließend ausgeführt werden muß . Außerdem muß sie danach (oder als erstes ) gelöscht werden.
Das ist der Ansatz, evtl mußt Du noch vorher das <DIR> ausfiltern, bzw kannst Du so die Namen der Verzeichnisse herausfinden, die Du mit 'rd' löschen willst. Das wäre insofern kein Problem, als sich nur leere Verzeichnisse löschen lassen. Allerdings sind auch verzeichnisse mit leeren Unterverzeichnissen nicht leer

Wenn Du eine schöne (funktionierende) batch hinbekommen hast, kannst Du sie ja posten.
sheepdog
Last edited by Sheepdog on 2004-08-07, 01:00 UTC, edited 1 time in total.
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Rudi,
HTH
Roman
Versuche es mal mit http://thehacker.host.sk/myfiles/ und dort DelEmpty_1_03.zip . Hat zwar noch einen Bug wenn es aus dem Wurzelverzeichnis gestartet wird, aber ansonsten sollte es funktionieren.3. lösche dann alle leeren verzeichnisse
HTH
Roman
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.
Button:
Kommando: Pfad zur .bat-Datei
Parameter: %P
Batchdatei:
::Pfad setzen auf aktives Panel
cd /d %1
::gewünschte Dateiendungen löschen
del *.htm /s /q
del *.gif /s /q
del *.exe /s /q
::Alle Dateien < 102400 Bytes löschen
for /r %%a in (*) do if %%~za lss 102400 del "%%a"
::Alle leeren Verzeichnisse löschen
for /d /r %%a in (*) do rd "%%a"
Zu beachten ist, daß del und for versteckte sowie schreibgeschützte Dateien/Verzeichnisse ignorieren, ggf. also vorher mittels attrib sichtbar machen oder entsprechende Parameter setzen.
Icfu
Kommando: Pfad zur .bat-Datei
Parameter: %P
Batchdatei:
::Pfad setzen auf aktives Panel
cd /d %1
::gewünschte Dateiendungen löschen
del *.htm /s /q
del *.gif /s /q
del *.exe /s /q
::Alle Dateien < 102400 Bytes löschen
for /r %%a in (*) do if %%~za lss 102400 del "%%a"
::Alle leeren Verzeichnisse löschen
for /d /r %%a in (*) do rd "%%a"
Zu beachten ist, daß del und for versteckte sowie schreibgeschützte Dateien/Verzeichnisse ignorieren, ggf. also vorher mittels attrib sichtbar machen oder entsprechende Parameter setzen.
Icfu
Last edited by icfu on 2004-08-07, 00:52 UTC, edited 1 time in total.
This account is for sale
Wenn Du Dir den renamer und Hackers DelEmpty heruntergeladen hast, dann könntest Du icfus Batch wie folgt erweitern:
Der Button dazu enthält:
Kommando: Pfad zur .bat-Datei
Parameter: %p
Du mußt ein kleines %p benutzen, weil sich delempty sonst bei Pfaden mit leerzeichen verschluckt - ändert aber an der übrigen Funktionalität nichts.
Außerdem mußt Du darauf achten, dass die Zeichen in der bkren-Zeile im DOS Zeichensatzeingegeben werden. Also auf jeden Fall das ganze erst auf ein Testverzeichnis loslassen.
2icfu
Ist ja unfair, wenn Du einfach Batch-Parameter benutzt, die ich mühsam mit meiner for Schleife abzubilden versuche

sheepdog
Code: Select all
cd /d %1
del *.htm /s /q
del *.gif /s /q
del *.exe /s /q
for /r %%a in (*) do if %%~za lss 102400 del "%%a"
rem 102400 -> Dateigröße in Bytes
delempty "%1" del
bkren -s "(.*)-(.*)" "\1_\2"
Der Button dazu enthält:
Kommando: Pfad zur .bat-Datei
Parameter: %p
Du mußt ein kleines %p benutzen, weil sich delempty sonst bei Pfaden mit leerzeichen verschluckt - ändert aber an der übrigen Funktionalität nichts.
Außerdem mußt Du darauf achten, dass die Zeichen in der bkren-Zeile im DOS Zeichensatzeingegeben werden. Also auf jeden Fall das ganze erst auf ein Testverzeichnis loslassen.
2icfu
Ist ja unfair, wenn Du einfach Batch-Parameter benutzt, die ich mühsam mit meiner for Schleife abzubilden versuche





sheepdog
Last edited by Sheepdog on 2004-08-07, 00:55 UTC, edited 1 time in total.
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Da hab ich vorhin wohl geschlafen. Danke für den Hinweis.icfu wrote:Rudi wollte Dateien löschen, die kleiner sind, nicht größer... Hab's editiert...
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
vielen dank an alle!
genau so hab ich mir das vorgestellt.
der knackpunkt (für mich) war auch das mit dem parameter im button...
meine .bat datei ist zur zeit:
cd /d %1
echo %1
pause
del *.htm /s /q
del *.html /s /q
del *.gif /s /q
for /r %%a in (*) do if %%~za lss 20000 del "%%a"
delempty "%1" del
bkren -s "(.*)-(.*)" "\1_\2"
hab nun delempty und bkren installiert und alles getestet. funktioniert bestens. wird mir in zukunft viel arbeit ersparen - danke nochmals -
rudi
der knackpunkt (für mich) war auch das mit dem parameter im button...
meine .bat datei ist zur zeit:
cd /d %1
echo %1
pause
del *.htm /s /q
del *.html /s /q
del *.gif /s /q
for /r %%a in (*) do if %%~za lss 20000 del "%%a"
delempty "%1" del
bkren -s "(.*)-(.*)" "\1_\2"
hab nun delempty und bkren installiert und alles getestet. funktioniert bestens. wird mir in zukunft viel arbeit ersparen - danke nochmals -
rudi
noch ein problem
ein problem hab ich damit noch:
ich möchte, dass neben den oben genannten files auch alle folder (im pfad des aktiven TC fensters) und alle subfolder mit einem bestimmten namen (z.b. "images") gelöscht werden. Und falls sich files in diesen foldern befinden, sollten auch diese gelöscht werden.
hab einiges probiert - hat nicht geklappt. irgendwelche vorschläge?
danke -
rudi
ich möchte, dass neben den oben genannten files auch alle folder (im pfad des aktiven TC fensters) und alle subfolder mit einem bestimmten namen (z.b. "images") gelöscht werden. Und falls sich files in diesen foldern befinden, sollten auch diese gelöscht werden.
hab einiges probiert - hat nicht geklappt. irgendwelche vorschläge?
danke -
rudi
Re: noch ein problem
Gib mal ein Beispiel für die Verzeichnisstruktur und was du darin gelöscht haben willst.
sheepdog
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
[verzeichnisname1]
- filename1
- [verzeichnisname2]
--- filename3
- [verzeichnisnameX]
--- filename5
- [verzeichnisname5]
- filename6
- [verzeichnisnameX]
- [verzeichinsname3]
soll durch VERZEICHNISLOESCH 'verzeichnisnameX' zu:
[verzeichnisname1]
- filename1
- [verzeichnisname2]
--- filename3
--- [verzeichinsname3
- [verzeichnisname5]
- filename6
- [verzeichinsname3]
werden.
rudi
- filename1
- [verzeichnisname2]
--- filename3
- [verzeichnisnameX]
--- filename5
- [verzeichnisname5]
- filename6
- [verzeichnisnameX]
- [verzeichinsname3]
soll durch VERZEICHNISLOESCH 'verzeichnisnameX' zu:
[verzeichnisname1]
- filename1
- [verzeichnisname2]
--- filename3
--- [verzeichinsname3
- [verzeichnisname5]
- filename6
- [verzeichinsname3]
werden.
rudi
So verstehe ich Dein Bild:
Was aber nicht geht, da 'VerzeichnisnameX' nicht zweimal im gleichen Zweig liegen kann.
sheepdog
Code: Select all
\
|_[verzeichnisname1]
| |_filename1
| |
| |
| |_[verzeichnisname2]
| | |_filename3
| |
| |_[verzeichnisnameX]
| | |_filename5
| |
| |_[verzeichnisname5]
| | |_filename6
| |
| |_[verzeichnisnameX]
| |
| |_[verzeichinsname3]
|
|_[Hier würde ein ganz anderes Verzeichnis im Rootverzeichnis des Laufwerks liegen]
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Die beiden Zeilen
del verzeichnisX\*.* /s /q ->löscht die Dateien in 'VerzeichnisnameX' alle, ohne Nachfrage
rd verzeichnisX -> löscht das Verzeichnis (das ja nun leer ist)
sollten dann Dein Problem lösen.
Alerdings ist mir immer noch nicht klar, wo 'VerzeichnisnameX' nochmal auftauchen sollte. Daher auch meine Frage nach dem Beispiel. Zur Not mach noch mal eine Zitatantwort von meinem Posting mit dem Verzeichnisbaum und zeichne dort noch mal ein, wo ein zweites und drittes 'VerzeichnisX' liegen könnten.
sheepdog
del verzeichnisX\*.* /s /q ->löscht die Dateien in 'VerzeichnisnameX' alle, ohne Nachfrage
rd verzeichnisX -> löscht das Verzeichnis (das ja nun leer ist)
sollten dann Dein Problem lösen.
Alerdings ist mir immer noch nicht klar, wo 'VerzeichnisnameX' nochmal auftauchen sollte. Daher auch meine Frage nach dem Beispiel. Zur Not mach noch mal eine Zitatantwort von meinem Posting mit dem Verzeichnisbaum und zeichne dort noch mal ein, wo ein zweites und drittes 'VerzeichnisX' liegen könnten.
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams