batch datei auf knopfdruck

German support forum

Moderators: Hacker, Stefan2, white

Rudi
Junior Member
Junior Member
Posts: 29
Joined: 2003-02-12, 14:41 UTC

batch datei auf knopfdruck

Post by *Rudi »

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
User avatar
Cineatic
Power Member
Power Member
Posts: 876
Joined: 2003-06-02, 14:09 UTC

Post by *Cineatic »

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.
Gruß,
Christian
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

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
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
User avatar
Hacker
Moderator
Moderator
Posts: 13142
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

Rudi,
3. lösche dann alle leeren verzeichnisse
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.

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.
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

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
Last edited by icfu on 2004-08-07, 00:52 UTC, edited 1 time in total.
This account is for sale
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

Wenn Du Dir den renamer und Hackers DelEmpty heruntergeladen hast, dann könntest Du icfus Batch wie folgt erweitern:

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 ;) :lol: :D :P :twisted:

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
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Rudi wollte Dateien löschen, die kleiner sind, nicht größer... Hab's editiert... :)
Ist ja unfair, wenn Du einfach Batch-Parameter benutzt, die ich mühsam mit meiner for Schleife abzubilden versuche
Das Leben ist hart und ungerecht. ;)

Icfu
This account is for sale
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

icfu wrote:Rudi wollte Dateien löschen, die kleiner sind, nicht größer... Hab's editiert... :)
Da hab ich vorhin wohl geschlafen. Danke für den Hinweis.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Rudi
Junior Member
Junior Member
Posts: 29
Joined: 2003-02-12, 14:41 UTC

vielen dank an alle!

Post by *Rudi »

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
Rudi
Junior Member
Junior Member
Posts: 29
Joined: 2003-02-12, 14:41 UTC

noch ein problem

Post by *Rudi »

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
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Re: noch ein problem

Post by *Sheepdog »

Gib mal ein Beispiel für die Verzeichnisstruktur und was du darin gelöscht haben willst.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Rudi
Junior Member
Junior Member
Posts: 29
Joined: 2003-02-12, 14:41 UTC

Post by *Rudi »

[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
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

So verstehe ich Dein Bild:

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]
Was aber nicht geht, da 'VerzeichnisnameX' nicht zweimal im gleichen Zweig liegen kann.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Rudi
Junior Member
Junior Member
Posts: 29
Joined: 2003-02-12, 14:41 UTC

Post by *Rudi »

Was aber nicht geht, da 'VerzeichnisnameX' nicht zweimal im gleichen Zweig liegen kann.
stimmt - mein fehler.
lass einfach das 2. 'VerzeichnisnameX' weg.
was ich sagen wollte war, dass 'VerzeichnisnameX' mehrfach vorkommen kann (natürlich nicht im selben zweig) -

rudi
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

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
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Post Reply