Textdatei bei findstr-Treffer löschen
Hey ihr,
hab ein kleines Problem mit ner For-Schleife.
Ich habe hierzu schon diesen Thread hier gefunden, hat mir aber nicht ganz weitergeholfen. per Batch Dateien anhand von Inhaltsmuster löschen
Nun...ich hab n Programm geschrieben, dass mir die Windowshilfe in Textdateien druckt. Allerdings gibt es nicht für jeden Befehl ne Hilfe bzw. kann ich sie nicht für jeden speichern. Bsp. wäre rasdial...
Nun habe ich die Datei und dort steht drinne : "Zu diesem Befehl steht kein Hilfethema zur Verfgung.
Versuchen Sie es mit "rasdial /?". "
Ich möchte jetzt alle Dateien nach diesem Text durchsuchen lassen und diese Dateien dann löschen.
Natürlich muss dazu rasdial als Variable drinn sein.
Momentan sieht man Code folgendermaßen aus:
Der Suchtext ist gekürzt. Passt auch so. Aber bei der Verarbeitung passt i-was nicht. Er geht zwar alle "fehlerhaften" Dateien durch, gibt mir dann aber die Hilfe für "del" aus
So sieht mein gesamter Code aus. Die beiden echos sind natürlich nur zeitweise. Die sorgen dafür dass beide Möglichkeiten getestet werden...tut aber nix zur Sache.
Vllt kann mir auch noch jmd sagen was diese "setlocal" bewirkt?
Ich hoffe mir kann jmd helfen^^
Viele Grüße
hab ein kleines Problem mit ner For-Schleife.
Ich habe hierzu schon diesen Thread hier gefunden, hat mir aber nicht ganz weitergeholfen. per Batch Dateien anhand von Inhaltsmuster löschen
Nun...ich hab n Programm geschrieben, dass mir die Windowshilfe in Textdateien druckt. Allerdings gibt es nicht für jeden Befehl ne Hilfe bzw. kann ich sie nicht für jeden speichern. Bsp. wäre rasdial...
Nun habe ich die Datei und dort steht drinne : "Zu diesem Befehl steht kein Hilfethema zur Verfgung.
Versuchen Sie es mit "rasdial /?". "
Ich möchte jetzt alle Dateien nach diesem Text durchsuchen lassen und diese Dateien dann löschen.
Natürlich muss dazu rasdial als Variable drinn sein.
Momentan sieht man Code folgendermaßen aus:
for /f "delims=" %%i in ('findstr /b /i /C:Versuchen Sie es mit %%i "%CD%\*.txt"') do (del "%CD%\%%i")
Der Suchtext ist gekürzt. Passt auch so. Aber bei der Verarbeitung passt i-was nicht. Er geht zwar alle "fehlerhaften" Dateien durch, gibt mir dann aber die Hilfe für "del" aus
@echo off & setlocal
set "Size=1
echo for /f "delims=" %%i in ('dir /b %CD%\"*.txt"') do if %%~zi LSS 1 for /f "delims=." %%n in ('echo %%~i') do help %%n > "%CD%\%%n.txt"
echo for /f "delims=" %%i in ('dir /b %CD%\"*.txt"') do if %%~zi GEQ 1 for /f "delims=." %%n in ('echo %%~i') do %%n /? > "%CD%\%%n.txt"
for /f "delims=" %%i in ('findstr /b /i /C:Versuchen Sie es mit %%i "%CD%\*.txt"') do (del "%CD%\%%i")
sleep 20
So sieht mein gesamter Code aus. Die beiden echos sind natürlich nur zeitweise. Die sorgen dafür dass beide Möglichkeiten getestet werden...tut aber nix zur Sache.
Vllt kann mir auch noch jmd sagen was diese "setlocal" bewirkt?
Ich hoffe mir kann jmd helfen^^
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 139377
Url: https://administrator.de/forum/textdatei-bei-findstr-treffer-loeschen-139377.html
Ausgedruckt am: 05.02.2025 um 09:02 Uhr
6 Kommentare
Neuester Kommentar
Hallo bankaifan und willkommen im Forum!
Eher so:
Übrigens: Das von Dir verwendete %CD% ist redundant - im aktuellen Pfad bist Du ohenehin schon ...
Grüße
bastla
Eher so:
for %%i in (*.txt) do findstr /b /i /c:"Versuchen Sie es mit %%~ni">nul && echo del "%%i"
Vllt kann mir auch noch jmd sagen was diese "setlocal" bewirkt?
Das "setlocal
" sorgt dafür, dass Änderungen (auch das Neu-Erstellen fällt darunter) an Variablen (zB %Size%) nur bis zum nächsten "endlocal
" gelten - da ein solches spätestens (und dann automatisch) am Ende des Batches ausgeführt wird, bleiben keine "Reste" (die sich dann in einem aus dem gleichen CMD-Fenster gestarteten weiteren Batch auswirken könnten) ...Übrigens: Das von Dir verwendete %CD% ist redundant - im aktuellen Pfad bist Du ohenehin schon ...
Grüße
bastla
Hallo bankaifan!
Zu Deinen Fragen: Zu entschuldigen gibt's da gar nix (und wenn ich grade keine Zeit oder Lust hätte, müsste ich ja auch nicht antworten) - ganz im Gegenteil ...
Grüße
bastla
..und dann passiert einfach nix^^
Was sollte denn passieren? Selbst, wenn es in der Datei eine Zeile mit dem gesuchten Text gäbe (sollte ja in der "if.txt" nicht der Fall sein), würde der Löschbefehl nur angezeigt (das "echo
" vor dem "del
" - hatte ich oben nicht erwähnt - erlaubt ein stressfreieres Testen, weil noch nicht wirklich gelöscht, sondern nur der Löschbefehl angezeigt wird; testen solltest Du übrigens einen Batch ohnehin direkt in der CMD-Shell, oder zumindest mit einem "pause
" am Ende, um alle Ausgaben in Ruhe lesen zu können).Zu Deinen Fragen: Zu entschuldigen gibt's da gar nix (und wenn ich grade keine Zeit oder Lust hätte, müsste ich ja auch nicht antworten) - ganz im Gegenteil ...
Das %%~ni bewirkt dass das .txt am ende weg fällt, richtig?
Yep.was macht das "nul"
"nul
" steht für "das Nichts", und dahin wird in diesem Fall die Ausgabe des "findstr
" geschickt, da ja nur interessiert, ob der gesuchte Text in der Datei steht (Du kannst ">nul
" aber mal weglassen und schauen, was dann passiert).Warum braucht man hier ein doppeltes &?
Und woher "weiß" das findstr dass nach dem "versuchen..." das ende des strings erreicht ist? bei mir hat er immer alles was dahinter stand mit in den string einbezogen.
Die Frage ist mir nicht ganz klar - Tatsache ist allerdings, dass "findstr
" zeilenorientiert ist und daher als Ergebnis immer die ganz Zeile, in welcher der Suchbegriff gefunden wurde, liefert ...Grüße
bastla
Hallo bankaifan!
Aber jetzt:
Grüße
bastla
Fehlt da einfach noch iwas?
Außer der Kleinigkeit, dass ich auch noch angeben sollte, in welcher Datei zu suchen ist, eigentlich nicht - sorry, war vorhin schon mehr weg als da ... Aber jetzt:
for %%i in (*.txt) do findstr /b /i /c:"Versuchen Sie es mit %%~ni" "%%i">nul && echo del "%%i"
bastla