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

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: TlBERlUS
Lösung TlBERlUS 03.10.2015, aktualisiert am 07.10.2015 um 19:36:10 Uhr
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
Mitglied: xxxxxxx
xxxxxxx 03.10.2015 um 23:48:25 Uhr
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 04.10.2015 aktualisiert um 17:59:13 Uhr
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.
Mitglied: xxxxxxx
xxxxxxx 04.10.2015 um 17:28:18 Uhr
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
Mitglied: xxxxxxx
xxxxxxx 04.10.2015 um 17:29:31 Uhr
Goto Top
Sorry sollte nartürlich Befehle heißen.
Mitglied: 122990
122990 04.10.2015 aktualisiert um 18:03:56 Uhr
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.
Mitglied: xxxxxxx
xxxxxxx 06.10.2015 um 23:08:52 Uhr
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.
Mitglied: xxxxxxx
xxxxxxx 07.10.2015 um 19:37:07 Uhr
Goto Top
Ey funktioniert!
Daaaaankeeee!!!!