silence
Goto Top

Batchdatei soll in Dateien txt und xml nach einem Text suchen

Hallo zusammen

Ich bin neu hier und wäre froh um Hilfe von Euch. Ich kenne mich nicht sonderlich gut aus mit Batchdateien und benötige Hilfe für eine Erweiterung.

Folgendes:

Auf einem Laufwerk liegen ca. 30 Dateien, teils txt und teils xml. Ich möchte mit einer Batchdatei herausfinden, in welchen Dateien ein bestimmtes Wort vorkommt und diese Dateinamen in eine Protokolldatei schrieben.

Mit folgendem Code funktioniert das auch sauber, wenn ich z.B. die Suche nach "Beppi" in allen txt Dateien ausführe.

@echo off & setlocal

set "SrcDir=D:\Spezialtools"
set "FileType1=txt"
set "FileType2=xml"
set "SearchKey=Beppi"
set "LogFile=Protokoll.txt"

(for %%f in ("%SrcDir%\*.%FileType1%") do (
type "%%~f" | findstr /M /C:"%SearchKey%" > NUL && (
echo %%~f
)

)) > "%LogFile%"


Ich weiss nicht, wie ich den Code schreiben muss, dass er alle Dateien, also txt und xml, durchsucht. Also z.B. zuerst alle txt Dateien durchsucht, danach die xmls, und das Resultat dann in eine einzige Protokolldatei schreibt. Ich habe schon 2 Stunden probiert und versucht, aber komm auf keinen grünen Zweig.

Wenn das funktioniert, möchte ich im Nachgang mit einer Eingabemöglichkeit dem Nutzer erlauben, das gesucht Wort selber einzugeben. Aber das krieg ich vielleicht selber hin.

Vielen Dank für Eure Hilfe.

Viele Grüsse
Silence

Content-ID: 4962436112

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

Ausgedruckt am: 22.11.2024 um 02:11 Uhr

SeaStorm
SeaStorm 14.12.2022 aktualisiert um 21:01:09 Uhr
Goto Top
Hi

1.) Machs nicht so kompliziert face-smile
@echo off & setlocal

set "SrcDir=D:\Spezialtools"  
set "FileType1=*.txt"  
set "FileType2=*.xml"  
set "SearchKey=Beppi"  
set "LogFile=Protokoll.txt"  
cd %SrcDir%
findstr /M /C:"%SearchKey%" %FileType1% %FileType2% > %LogFile%  

2.)
Batch ist tot. Schon sehr lange. Lass es in Frieden ruhen und lerne Powershell
$SrcDir="D:\Spezialtools"  
$searchextensions = @("*.xml","*.txt")  
$SearchKey="Beppi"  
$LogFile="Protokoll.txt"  
Get-ChildItem -Path $SrcDir -Include $searchextensions -Recurse | Select-String $SearchKey |  select Path | Out-File -FilePath $LogFile
UnbekannterNR1
Lösung UnbekannterNR1 14.12.2022 um 21:14:27 Uhr
Goto Top
Frage an die anderen erlauben wir hier "AI" antworten?

Das funktioniert bei mir so. Hab es extra getestet

@echo off
rem This batch file searches for a given word in all .txt and .xml files in the current directory
rem and writes the names of the files containing the word to a log file.

rem Set the search word and the log file path
set searchWord=your_search_word
set logFile=c:\temp\log.txt
set SrcDir=C:\tmp

rem Delete the log file if it already exists
if exist %logFile% del %logFile%
setlocal enabledelayedexpansion
rem Search for the word in all .txt and .xml files
cd %SrcDir%
for /R . %%f in (*.txt, *.xml) do (
  findstr /M /C:%searchWord% "%%f"   
  if !errorlevel!==0 (
    rem Write the name of the file containing the word to the log file
    echo %%f >> %logFile%
  )
)


Um die Batchdatei auszuführen, müssen Sie sie in einem Ordner mit den zu durchsuchenden Dateien speichern und dann über die Eingabeaufforderung (cmd.exe) aufrufen. Wenn Sie die Batchdatei beispielsweise search.bat nennen, können Sie sie wie folgt aufrufen:
cd path/to/folder
search.bat
Die Batchdatei sucht dann in allen .txt- und .xml-Dateien im aktuellen Verzeichnis nach dem angegebenen Wort und schreibt die Namen der Dateien, in denen das Wort gefunden wurde, in die Protokolldatei log.txt.
Silence
Silence 15.12.2022 um 09:47:27 Uhr
Goto Top
Danke Seastorm für den Hinweis, schaue ich mir sehr gerne mal an mit dem Powershell. Bin noch alte Schule, daher erinnerte ich mich an das BAT-Zeugs und dachte ich probiers mal so.

Schlussendlich hat mir der Tipp von UnbekannterNr1 am besten geholfen, funktioniert einwandfrei. Danke vielmals Euch beiden für die schnelle hilfe, Top hier.

Viele Grüsse Silence
Silence
Silence 16.12.2022 um 08:40:52 Uhr
Goto Top
Hallo zusammen

Jetzt steh ich an einem andern Ort an und vielleicht könnt ihr mir nochmals helfen.

Funktioniert wunderbar wenn ich auf ein Laufwerk vom Notebook geh. Nun möchte ich aber auf ein eingebundenes Netzlaufwerk gehen um dort Dateien zu prüfen. Das Laufwerk hat den zugewiesenen Buchstaben Y.
Der obige Code funktioniert aber nicht oder bringt kein Resultat wenn ich den Laufwerkspfad eingebe, hab schon alles versucht, auch mit dem Pfad der in den LW-Eigenschaften im Reiter DFS hinterlegt ist.

Mit einem andern BAT kann ich aber problemlos z.B. Dateien auflisten lassen mit DIR wenn ich das Netzlaufwerk angebe.

Warum funktioniert es nicht mit dem Suchcode von UnbekannterNr1?
SeaStorm
Lösung SeaStorm 16.12.2022 um 10:49:32 Uhr
Goto Top
lässt du die Datei vielleicht als Admin(elevated)\anderer User laufen? Da ist dann das Laufwerk nicht eingebunden.
Ggf in der Batch mit Net use erst das Laufwerk einbinden
Silence
Silence 22.12.2022 um 09:27:27 Uhr
Goto Top
Hallo zusammen

funktioniert jetzt wunderprächtig.

Wenn man dies nun ausbauen möchte, zum Beispiel anstatt nach einem Wort zu suchen in verschiedenen Tabellen, nach mehreren Wörtern suchen lassen, ginge das auch irgendwie?

Ich stelle mir dies so vor:

Es besteht eine Liste (txt oder excel) mit den zu suchenden Wörtern.
Die Batchdatei soll alle Wörter die in dieser Liste sind abarbeiten und ausgeben, in welchen Tabellen diese vorkommen.

Resultat in der Prokolldatei:

Wort "Beppo" in Tabelle XY
Wort "Pipo" in Tabelle ZZ
Wort "Hans" in Tabelle XX
Wort "Hans" in Tabelle AA

Danke für Eure tolle Unterstützung!
Grüsse Silence