godzilla13
Goto Top

Findstr - Suche mit Wildcards

Hallo zusammen,

für die Generierung von Betriebsanleitungen haben wir Kapitellisten im XML Format, in denen die verwendeten Kapitel für die Betriebsanleitung erfasst sind. Für mich ist nun öfters notwendig zu ermitteln in welchen Kapitellisten bestimmte Kapitel erfasst sind. Da wir hier von mehreren hundert Kapitellisten reden ist eine manuelle Suche nicht mehr möglich.

Da man mit findstr auch XML Dateien durchsuchen kann, dachte ich mir das man diese Suche vielleicht via Batch umsetzen kann. Diese Dateien (diese liegen in verschiedenen Unterverzeichnissen) sollen nun via Batch auf eine bestimmte Zeichenkette hin durchsucht und alle gefundenen Dateien in einem Ergebnis Textfile aufgelistet werden. Die Zeichenkette nach der gesucht werden soll muss variabel sein und durch Benutzereingaben ergänzt werden können.

Beispiel Zeichenkette nach der gesucht werden soll:
Verwendung="J" Dokument_Nummer="1160" Dokument_Version="02"

Die Werte J, 1160 und 02 sollen dabei als Variablen fungieren die der Benutzer vor Beginn der Suche eingeben muss:

Benutzereingabe:
-> Verwendung J/N: J
-> Dokument Nummer: 1160
-> Dokument Version: 02
Aktion: Ermittelt alle XML Dateien in denen das Dokument mit Nummer 1160, Version 02 und Verwendung J auftaucht.
Diese Anforderung konnte ich umsetzen, siehe Code unten.

Zusätzlich soll es die Möglichkeit geben Wildcards als Variablen einzusetzen.

Benutzereingabe:
-> Verwendung J/N: *
-> Dokument Nummer: 1160
-> Dokument Version: *
Aktion: Ermittelt alle XML Dateien in denen das Dokument mit Nummer 1160 auftaucht, unabhängig davon welche Version oder Verwendung dieses hat.
Hier scheitere ich leider im Moment.

Ich habe von Batch Geschichten leider kaum einen Ahnung und mir meinen bisherigen Vorschlag aus verschiedenen Scripten zusammen kopiert. Der Code funktioniert soweit auch, in der Liste.txt stehen alle Dateinamen wo der Suchstring enthalten ist. Leider kann ich im Suchstring keine Wildcards verwenden. Gibt es irgendeine Möglichkeit das Wildcardproblem doch zu lösen?

@echo off & setlocal EnableDelayedExpansion

set /p Verwendung=Verwendung (J/N/*): 
set /p DokNummer=Dokument Nummer: 
set /p DokVersion=Dokument Version (2-stellig oder *): 

echo Verwendung="%Verwendung%" Dokument_Nummer="%DokNummer%" Dokument_Version="%DokVersion%" > suchstring.txt  

@(for /f "delims=" %%f in ('findstr /s /i /m /g:"suchstring.txt" *.xml') do @(  
	echo %%~nf
)) > "Liste.txt"  

@pause

Danke vorab und viele Grüße,

Godzilla13 aka Alex

Content-ID: 187844

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

Ausgedruckt am: 26.11.2024 um 02:11 Uhr

bastla
bastla 11.07.2012 aktualisiert um 15:51:22 Uhr
Goto Top
Hallo Godzilla13 und willkommen im Forum!

Soferne sich die Wildcard-Funktionalität darauf beschränken lässt, bei "*" gar nicht nach zB "Verwendung" zu suchen, könntest Du einfach den Suchstring so zusammenbauen:
set "Suchstring="  
if "%Verwendung%" neq "*" set "Suchstring=Verwendung="%Verwendung%" "  
if "%DokNummer%" neq "*" set "Suchstring=%Suchstring%Dokument_Nummer="%DokNummer%" "  
if "%DokVersion%" neq "*" set "Suchstring=%Suchstring%Dokument_Version="%DokVersion%""  
>suchstring.txt echo %Suchstring%
BTW: EnableDelayedExpansion ist hier nicht erforderlich ...

Grüße
bastla
Godzilla13
Godzilla13 12.07.2012 um 07:39:39 Uhr
Goto Top
Vielen Dank bastla, deine Lösung passt perfekt.