Mehrstufige String-Suche durch Batchdatei ?
Hallo allerseits,
ich möchte das unten stehende Batch von biber auf "mehrere Strings in einer Zeile suchen" erweitern.
Zu Fuß über Zwischen-Dateien hat das geklappt
z.B.
1.Step wordfind c:\xyz\*.* "String1" > c:\temp\string1.txt
2.Step wordfind c:\temp\string2.txt "String2" > c:\temp\string2.txt
2.Step wordfind c:\temp\string3.txt "String3" > c:\temp\string3.txt
usw.
Wie kann ich das in das vorhande Batch integrieren ?
::-- snipp Wordfind.bat
:: einfacher Batchdreizeiler zum Suchen eines Strings in Dateien.
:: Usage: Batch irgendwo in den Pfad stellen.
:: Aufruf: Wordfind [Dateimaske] [Suchwort]
:: -Beispiel: Wordfind d:\temp\*.txt "biber"
:: !! Skizze: ohne Parameterprüfung, Help, etc.
@echo off
If Not [%1]==[___] (%0 ___ %1|find %2) & goto :eof
Setlocal EnableDelayedExpansion
for %%i in (%2) do (
Set /a "Line=10000"
For /F "delims=" %%a In (%%i) Do (
Set /a "Line=!line! +1"
Set cl=!line:~-3!
echo [%%i:!cl!] %%a
))
::-- snapp Wordfind.bat
ich möchte das unten stehende Batch von biber auf "mehrere Strings in einer Zeile suchen" erweitern.
Zu Fuß über Zwischen-Dateien hat das geklappt
z.B.
1.Step wordfind c:\xyz\*.* "String1" > c:\temp\string1.txt
2.Step wordfind c:\temp\string2.txt "String2" > c:\temp\string2.txt
2.Step wordfind c:\temp\string3.txt "String3" > c:\temp\string3.txt
usw.
Wie kann ich das in das vorhande Batch integrieren ?
::-- snipp Wordfind.bat
:: einfacher Batchdreizeiler zum Suchen eines Strings in Dateien.
:: Usage: Batch irgendwo in den Pfad stellen.
:: Aufruf: Wordfind [Dateimaske] [Suchwort]
:: -Beispiel: Wordfind d:\temp\*.txt "biber"
:: !! Skizze: ohne Parameterprüfung, Help, etc.
@echo off
If Not [%1]==[___] (%0 ___ %1|find %2) & goto :eof
Setlocal EnableDelayedExpansion
for %%i in (%2) do (
Set /a "Line=10000"
For /F "delims=" %%a In (%%i) Do (
Set /a "Line=!line! +1"
Set cl=!line:~-3!
echo [%%i:!cl!] %%a
))
::-- snapp Wordfind.bat
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51411
Url: https://administrator.de/forum/mehrstufige-string-suche-durch-batchdatei-51411.html
Ausgedruckt am: 08.05.2025 um 20:05 Uhr
6 Kommentare
Neuester Kommentar
Hallo,
wenn du mit UND Verknüpfung suchen willst, dann Pipe alles hintereinander:
type [Dateiname] | findstr "begriff1" | findstr "Begriff2" (... usw. ...)
Bei Suche mit ODER trenne deine Begriffe mit Leerzeichen
type [Dateiname] | findstr "begriff1 Begriff2 (... usw. ...)"
oder verwende eine Textdatei mit Suchbegriffen (je Zeile einer) - in findstr ist es Parameter G:/[Dateiname].
Ggf. helfen auch reguläre Suchmuster, um aus deinen Suchbegriffen ben nur einen Suchbegriff zu machen (das erzwingt aber eine Reihenfolge der Suchbegriffe), z.B.
type [Dateiname] | findstr "Begriff1.*Begriff2(... usw. ...)"
Viele Grüsse
-= Axel =-
wenn du mit UND Verknüpfung suchen willst, dann Pipe alles hintereinander:
type [Dateiname] | findstr "begriff1" | findstr "Begriff2" (... usw. ...)
Bei Suche mit ODER trenne deine Begriffe mit Leerzeichen
type [Dateiname] | findstr "begriff1 Begriff2 (... usw. ...)"
oder verwende eine Textdatei mit Suchbegriffen (je Zeile einer) - in findstr ist es Parameter G:/[Dateiname].
Ggf. helfen auch reguläre Suchmuster, um aus deinen Suchbegriffen ben nur einen Suchbegriff zu machen (das erzwingt aber eine Reihenfolge der Suchbegriffe), z.B.
type [Dateiname] | findstr "Begriff1.*Begriff2(... usw. ...)"
Viele Grüsse
-= Axel =-
Soooooooo, V-Twin-1000,
hat einen Moment länger gedauert.
Aber jetzt habe ich wenigstens eine Alternative für Dich ...
Vorschlag.
In Aktion mit unterschiedlicher Parameteranzahl:
Ich denke, der ist flexibel genug und ich hab ihn so lang gelassen, dass er noch lesbar bleibt.
Gruss
Biber
[Edit 15.2.2007 Demo-Beispiel ausgetauscht]
hat einen Moment länger gedauert.
Aber jetzt habe ich wenigstens eine Alternative für Dich ...
Vorschlag.
:: ---- snipp WordsInOneLine.bat Biber 2007
@echo off & setlocal
If [%2]== (echo Syntax: %~n0 ^<FileMask^> ^<searchStr1 [..searchStrN]^>) && goto :eof
Set "filemask=%~1" & set "SearchStr1=%~2"
Shift & Shift
For %%i in (%1 %2 %3 %4 %5 %6 %7 %8 %9) do call :addFilter "%%~i"
set "allfilter=findstr /n /i "%searchstr1%" "%filemask%" %NextFilter%"
Set allfilter=%allfilter:@@@=^^^|%
for /f "delims=" %%i in ('%Allfilter%') do echo %%i
goto :eof
:AddFilter
Set "NextFilter=%nextfilter%@@@findstr /i %1"
In Aktion mit unterschiedlicher Parameteranzahl:
>WordsInOneLine /?
Syntax: WordsInOneLine <FileMask> <searchStr1 [..searchStrN]>
(= 8:54:15 D:\temp=)
>type f:\temp\ziffern.txt
eins zwei drei vier fünf sechs sieben acht neun sieben acht neun
sieben acht neun zehn elf drei vier fünf drei vier fünf
zwölf dreizehn sieben acht neun sieben acht neun
sieben acht neun sieben acht neun drei vier fünf
drei vier fünf drei vier fünf drei vier fünf drei vier fünf
eins zwei drei vier eins zwei drei vier eins zwei drei vier
zehn elf drei vier zehn elf drei vier zehn elf drei vier
(= 8:54:58 D:\temp=)
>wordsInOneLine f:\temp\zi*.* vier
f:\temp\Ziffern.txt:1:eins zwei drei vier fünf sechs sieben acht neun sieben acht neun
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf
f:\temp\Ziffern.txt:4:sieben acht neun sieben acht neun drei vier fünf
f:\temp\Ziffern.txt:5:drei vier fünf drei vier fünf drei vier fünf drei vier fünf
f:\temp\Ziffern.txt:6:eins zwei drei vier eins zwei drei vier eins zwei drei vier
f:\temp\Ziffern.txt:7:zehn elf drei vier zehn elf drei vier zehn elf drei vier
(= 8:55:14 D:\temp=)
>wordsInOneLine f:\temp\zi*.* vier fünf
f:\temp\Ziffern.txt:1:eins zwei drei vier fünf sechs sieben acht neun sieben acht neun
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf
f:\temp\Ziffern.txt:4:sieben acht neun sieben acht neun drei vier fünf
f:\temp\Ziffern.txt:5:drei vier fünf drei vier fünf drei vier fünf drei vier fünf
(= 8:55:19 D:\temp=)
>wordsInOneLine f:\temp\zi*.* vier fünf acht
f:\temp\Ziffern.txt:1:eins zwei drei vier fünf sechs sieben acht neun sieben acht neun
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf
f:\temp\Ziffern.txt:4:sieben acht neun sieben acht neun drei vier fünf
(= 8:55:24 D:\temp=)
>wordsInOneLine f:\temp\zi*.* vier fünf acht sieben
f:\temp\Ziffern.txt:1:eins zwei drei vier fünf sechs sieben acht neun sieben acht neun
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf
f:\temp\Ziffern.txt:4:sieben acht neun sieben acht neun drei vier fünf
(= 8:55:29 D:\temp=)
>wordsInOneLine f:\temp\zi*.* vier fünf acht sieben elf
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf
(= 8:55:32 D:\temp=)
>wordsInOneLine f:\temp\zi*.* vier fünf acht sieben zehn
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf
Ich denke, der ist flexibel genug und ich hab ihn so lang gelassen, dass er noch lesbar bleibt.
Gruss
Biber
[Edit 15.2.2007 Demo-Beispiel ausgetauscht]
Freut mich, V-Twin-1000,
kannst Du den Beitrag dann "Editieren" und auf "Erledigt" setzen bitte?
Ich habe unter "Windows" weder mehr Plan noch mehr Rechte als jeder andere und kann es daher nicht selbst tun.
Schönes Wochenende
Biber
[Edit] Beitrag wurde von "Windows" nach "Batch & Shell" verschoben inzwischen. [/Edit]
kannst Du den Beitrag dann "Editieren" und auf "Erledigt" setzen bitte?
Ich habe unter "Windows" weder mehr Plan noch mehr Rechte als jeder andere und kann es daher nicht selbst tun.
Schönes Wochenende
Biber
[Edit] Beitrag wurde von "Windows" nach "Batch & Shell" verschoben inzwischen. [/Edit]