xxxxxxx
Goto Top

Mit Batch nach einem String in allen bat Dateien auf C suchen und die gefundenen evtl. löschen

Hallo liebe Forummitglieder,
Ich habe schon viele nützliche Beiträge bei Ihnen gefunden und bin daher sehr begeistert von Ihren Forum.

Heute nun habe ich eine Frage an Sie und schätze ihre Hilfe sehr. Bitte Tipps geben wenn ich Fehler mache (erster Beitrag).

Ich möchte eine .bat Datei schreiben die meine gesamten .bat Dateien nach einer Zeichnefolge durchsucht und bei Befund mir die entsprechenden Pfade mit Dateinamen ausgibt mit der Option gezielte Dateien zu löschen.
Hoffentlich ist das Möglich. Bin noch Anfänger in Batch-Programmierung und will mich unter anderem damit auch weiterbilden.

Vielen Dank im Foraus.

Content-Key: 284557

Url: https://administrator.de/contentid/284557

Printed on: April 23, 2024 at 10:04 o'clock

Member: TlBERlUS
Solution TlBERlUS Oct 03, 2015, updated at Oct 07, 2015 at 17:36:10 (UTC)
Goto Top
N`abend,

wenn du dich weiterbilden willst, solltest du dann nicht an dieser Stelle deinen bisherigen Code präsentieren, damit wir dich auf Fehler hinweisen?

Powershell:
clear-host
$path = ".\Desktop\test"  
$pattern = "txt"  

$item = gci $path -Filter *.$pattern -Recurse 

foreach($i in $item){
$t = $i | Select-String "test"  
$t = $t.path

remove-Item $t 
}


Grüße,

Tiberius
Member: xxxxxxx
xxxxxxx Oct 03, 2015 at 21:48:25 (UTC)
Goto Top
Hallo
nochmal und danke für die schnelle Antwort.
Ich habe bisher nur mit dem find, findstr Befehl rumgespielt, aber nicht hinbekommen.
( Ist nichts hilfreiches rausgekommen)
Daher hoffe ich ja, das ihr mir Code schickt und den für Anfänger erläutert damit ich mich weiterbilden und weiter experimentieren kann.
WILL ABER AUF KEINEN FALL SCRIPTKIDDIE MÄSSIG RÜBERKOMMEN !!!
Hatte ebend nur keine Idee mehr.
Mitglied: 122990
122990 Oct 03, 2015, updated at Oct 04, 2015 at 15:59:13 (UTC)
Goto Top
Moin Moin "SevenX",
guckst du
@echo off & setlocal enabledelayedexpansion
set "suchstring=BlaBla"  
for /f "delims=" %%a in ('findstr /ism /c:"%suchstring%" "C:\Ordner\*.bat" 2^>nul') do @(  
    echo Suchstring "%suchstring%" gefunden in Datei: "%%a"  
    choice /c jn /m "Wollen sie die Datei loeschen ?"  
    if !errorlevel! == 1 del "%%a"  
)
Gruß grexit

p.s. zum Weiterbilden würde ich keine Batch mehr nehmen .... das ist doch sowas von altbacken.
Member: xxxxxxx
xxxxxxx Oct 04, 2015 at 15:28:18 (UTC)
Goto Top
Den Code hab ich schon 10.000 mal ausprobiert und umgestellt er funktioniert einfach nicht.face-sad
Außerdem könnte jemand mir ein bisschen die Befehleo erläutern.
Verstehe manche noch nicht.
Danke
Member: xxxxxxx
xxxxxxx Oct 04, 2015 at 15:29:31 (UTC)
Goto Top
Sorry sollte nartürlich Befehle heißen.
Mitglied: 122990
122990 Oct 04, 2015 updated at 16:03:56 (UTC)
Goto Top
Den Code hab ich schon 10.000 mal ausprobiert und umgestellt er funktioniert einfach nicht.
Sorry hatte den Schalter /m bei findstr vergessen, jetzt läufts problemlos ... ist oben korrigiert
Kann man aber auch freundlicher sagen, wenn man hier schon Hilfe bekommt.

Also zur Erläuterung der Befehlsfolgen:

Schaltet die Befehlsausgabe still und die verzögerte Variablenerweiterung ein.
@echo off & setlocal enabledelayedexpansion

Setzt den Suchstring in eine Variable
set "suchstring=BlaBla"

Mit einer FOR-Schleife wird das Ergebnis der Suche mit findstr ausgewertet. Findstr durchsucht in dem angegebenen Ordner inkl. aller Unterordner nach *.bat Dateien die den Suchstring enthalten. Parameter /i = Case-Insensitive search, /m = nur die Pfade ausgeben, /s = durchsucht auch Unterordner, /c: = Sucht nach Zeichenfolge buchstabengetreu. findstr /? liefert dir die Hilfe zu findstr !

Als Ausgabe gibt Findstr die Pfade der gefundenen Dateien in der Laufzeitvariablen %%a aus welche im Schleifenkörper verarbeitet werden.
Im Schleifenkörper fragt dann das Skript mit choice ab ob die Datei gelöscht werden soll. Ist das der Fall wird die Datei in der nächsten Zeile gelöscht.
HIlfe zu choice gibts wie immer mit choice /?
Die Umgebungsvariable ERRORLEVEL wird auf den Index des Schlüssels gesetzt, der aus dem Auswahlsatz ausgewählt wurde. Die erste Auswahl gibt einen Wert von 1, die zweite einen Wert von 2 usw.
for /f "delims=" %%a in ('findstr /ism /c:"%suchstring%" "C:\Ordner\*.bat" 2^>nul') do @(
    echo Suchstring "%suchstring%" gefunden in Datei: "%%a"
    choice /c jn /m "Wollen sie die Datei loeschen ?"
    if !errorlevel! == 1 del "%%a"
)

Damit sollte das geklärt sein.

Weitere Batch-HIlfe findest du hier im Forum im Bereich zu allen nur erdenklichen Themen. Bevor also eine neue Frage gestellt wird hier unbedingt vorher ausführlich die Suche bemühen, dort findet sich alles nur erdenkliche zum Thema Batch.
Member: xxxxxxx
xxxxxxx Oct 06, 2015 at 21:08:52 (UTC)
Goto Top
Hallo grexit,
vielen Dank für die Hilfe und sorry wenn das Kommentar etwas forsch rüber gekommen ist.
Werde Morgen Code ausprobieren aber für heute erstmal vielen Dank.
Member: xxxxxxx
xxxxxxx Oct 07, 2015 at 17:37:07 (UTC)
Goto Top
Ey funktioniert!
Daaaaankeeee!!!!