Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mehrstufige String-Suche durch Batchdatei ?

Frage Entwicklung Batch & Shell

Mitglied: V-Twin-1000

V-Twin-1000 (Level 1) - Jetzt verbinden

12.02.2007, aktualisiert 16.02.2007, 4200 Aufrufe, 6 Kommentare

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
Mitglied: AxelHahn
12.02.2007 um 14:41 Uhr
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 =-
Bitte warten ..
Mitglied: V-Twin-1000
13.02.2007 um 09:54 Uhr
Hallo Axel,

das mit "findstr" geht ganz gut. Jetzt möchte das Batch noch umbauen das bis zu 4
suchstrings eingegeben werden können. Das funktioniert leider nicht, aber warum ?

So habe ich es aufgebaut:

:: 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" "schlotter" "Zitter" "hurz"
@Echo off
:s4
ECHO s4
IF [%5] == [___] goto :s3
If Not [%1]==[___] (%0 ___ %1|findstr "%2" |findstr "%3" |findstr "%4" |findstr "%5") & goto :eof
goto :search
:s3
ECHO s3
IF [%4] == [___] goto :s2
If Not [%1]==[___] (%0 ___ %1|findstr "%2" |findstr "%3" |findstr "%4") & goto :eof
goto :search
:s2
ECHO s2
IF [%3] == [___] goto :s1
If Not [%1]==[___] (%0 ___ %1|findstr "%2" |findstr "%3" ) & goto :eof
goto :search
:s1
ECHO s1
IF [%2] == [___] goto :eof
If Not [%1]==[___] (%0 ___ %1|findstr "%2" ) & goto :eof
:search
ECHO search
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
))
Bitte warten ..
Mitglied: Biber
13.02.2007 um 10:10 Uhr
Moin V-Twin-1000,
-in Bearbeitung--
Bitte warten ..
Mitglied: Biber
14.02.2007 um 21:58 Uhr
Soooooooo, V-Twin-1000,

hat einen Moment länger gedauert.
Aber jetzt habe ich wenigstens eine Alternative für Dich ...

Vorschlag.
01.
:: ---- snipp WordsInOneLine.bat Biber 2007 
02.
@echo off & setlocal 
03.
If [%2]==[] (echo Syntax: %~n0 ^<FileMask^> ^<searchStr1 [..searchStrN]^>) && goto :eof 
04.
Set "filemask=%~1" & set "SearchStr1=%~2" 
05.
Shift & Shift 
06.
For %%i in (%1 %2 %3 %4 %5 %6 %7 %8 %9) do call :addFilter "%%~i" 
07.
set "allfilter=findstr /n /i "%searchstr1%" "%filemask%" %NextFilter%" 
08.
Set allfilter=%allfilter:@@@=^^^|% 
09.
for /f "delims=" %%i in ('%Allfilter%') do echo %%i 
10.
goto :eof 
11.
:AddFilter 
12.
Set "NextFilter=%nextfilter%@@@findstr /i %1"
In Aktion mit unterschiedlicher Parameteranzahl:
01.
>WordsInOneLine /? 
02.
Syntax: WordsInOneLine <FileMask> <searchStr1 [..searchStrN]> 
03.
(= 8:54:15  D:\temp=) 
04.
>type f:\temp\ziffern.txt 
05.
eins zwei drei vier fünf sechs sieben acht neun sieben acht neun 
06.
sieben acht neun zehn elf drei vier fünf drei vier fünf 
07.
zwölf dreizehn sieben acht neun sieben acht neun 
08.
sieben acht neun sieben acht neun drei vier fünf 
09.
drei vier fünf drei vier fünf drei vier fünf drei vier fünf 
10.
eins zwei drei vier eins zwei drei vier eins zwei drei vier 
11.
zehn elf drei vier zehn elf drei vier zehn elf drei vier 
12.
(= 8:54:58  D:\temp=) 
13.
>wordsInOneLine f:\temp\zi*.* vier 
14.
f:\temp\Ziffern.txt:1:eins zwei drei vier fünf sechs sieben acht neun sieben acht neun 
15.
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf 
16.
f:\temp\Ziffern.txt:4:sieben acht neun sieben acht neun drei vier fünf 
17.
f:\temp\Ziffern.txt:5:drei vier fünf drei vier fünf drei vier fünf drei vier fünf 
18.
f:\temp\Ziffern.txt:6:eins zwei drei vier eins zwei drei vier eins zwei drei vier 
19.
f:\temp\Ziffern.txt:7:zehn elf drei vier zehn elf drei vier zehn elf drei vier 
20.
 
21.
(= 8:55:14  D:\temp=) 
22.
>wordsInOneLine f:\temp\zi*.* vier fünf 
23.
f:\temp\Ziffern.txt:1:eins zwei drei vier fünf sechs sieben acht neun sieben acht neun 
24.
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf 
25.
f:\temp\Ziffern.txt:4:sieben acht neun sieben acht neun drei vier fünf 
26.
f:\temp\Ziffern.txt:5:drei vier fünf drei vier fünf drei vier fünf drei vier fünf 
27.
 
28.
(= 8:55:19  D:\temp=) 
29.
>wordsInOneLine f:\temp\zi*.* vier fünf acht 
30.
f:\temp\Ziffern.txt:1:eins zwei drei vier fünf sechs sieben acht neun sieben acht neun 
31.
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf 
32.
f:\temp\Ziffern.txt:4:sieben acht neun sieben acht neun drei vier fünf 
33.
 
34.
(= 8:55:24  D:\temp=) 
35.
>wordsInOneLine f:\temp\zi*.* vier fünf acht sieben 
36.
f:\temp\Ziffern.txt:1:eins zwei drei vier fünf sechs sieben acht neun sieben acht neun 
37.
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf 
38.
f:\temp\Ziffern.txt:4:sieben acht neun sieben acht neun drei vier fünf 
39.
 
40.
(= 8:55:29  D:\temp=) 
41.
>wordsInOneLine f:\temp\zi*.* vier fünf acht sieben elf 
42.
f:\temp\Ziffern.txt:2:sieben acht neun zehn elf drei vier fünf drei vier fünf 
43.
 
44.
(= 8:55:32  D:\temp=) 
45.
>wordsInOneLine f:\temp\zi*.* vier fünf acht sieben zehn 
46.
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]
Bitte warten ..
Mitglied: V-Twin-1000
16.02.2007 um 12:08 Uhr
Hallo Biber,

funktioniert einwandfrei. Danke !

Gruß
V-Twin-1000
Bitte warten ..
Mitglied: Biber
16.02.2007 um 13:59 Uhr
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]
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
C und C++
gelöst Anzahl der Buchstaben in einem String Element Array C++ (3)

Frage von Protected zum Thema C und C ...

Router & Routing
Suche einen Dual oder Multi Wan Router (26)

Frage von Roland30 zum Thema Router & Routing ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (10)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...