Top-Themen

Aktuelle Themen (A bis Z)

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

Text-Begriff-Nummer in Datei suchen und bestimmte Zeile auslesen

Frage Entwicklung Batch & Shell

Mitglied: chgs2011

chgs2011 (Level 1) - Jetzt verbinden

14.11.2014 um 15:18 Uhr, 1263 Aufrufe, 13 Kommentare

Hallo,

ich suche eine Möglichkeit, eine Datei nach einem Text/Begriff/Nummer zu durchsuchen, um mir dann eine bestimme Zeile auslesen zu lassen.

Dateitypen sind unterschiedlich, können LOG, TXT, CACHE, ... sein, der Inhalt allerdings ist normaler Text.

Ich möchte dann nach Text "ABCDE" suchen, sofern vorhanden soll mir das Batch 17 Zeilen weiter oben diese Zeile auslesen.

Bislang habe ich folgendes realisiert, die Suche klappt und die gefundene Zeile wird ausgegeben:

01.
@echo off 
02.
:START 
03.
echo. 
04.
echo. ###################################### 
05.
echo. #                                    # 
06.
echo. #      Suche nach Text      # 
07.
echo. #                                    # 
08.
echo. ###################################### 
09.
echo. 
10.
echo Suche nach Text: 
11.
set /p wort=     
12.
echo. 
13.
find /i "%wort%" testfile.txt 
14.
echo. 
15.
echo. 
16.
GOTO START
Es ist vorab eine Teil-Lösung, anhand vom Suchergebnis, müsste ich in einer anderen Datei ebenfalls so weitersuchen und eine Zeile X auslesen.

Danke vorab.
Mitglied: rubberman
14.11.2014 um 16:17 Uhr
Hallo chgs2011.

Ich möchte dann nach Text "ABCDE" suchen, sofern vorhanden soll mir das Batch 17 Zeilen weiter oben diese Zeile auslesen.
01.
@echo off &setlocal 
02.
set "search=ABCDE" 
03.
set "file=testfile.txt" 
04.
 
05.
set "num=0" 
06.
for /f "delims=:" %%i in ('findstr /nic:"%search%" "%file%"') do set "num=%%i" 
07.
 
08.
if %num% equ 0 ( 
09.
  echo Suchzeichenfolge nicht gefunden. 
10.
  pause 
11.
  exit /b 
12.
13.
 
14.
 
15.
set /a "num -= 17" 
16.
 
17.
if %num% lss 1 ( 
18.
  echo Datei ist zu kurz. 
19.
  pause 
20.
  exit /b 
21.
22.
 
23.
set "line=" 
24.
<"%file%" ( 
25.
  for /l %%i in (2 1 %num%) do set /p "=" 
26.
  set /p "line=" 
27.
28.
 
29.
setlocal EnableDelayedExpansion 
30.
echo(!line! 
31.
endlocal 
32.
 
33.
pause
Es ist vorab eine Teil-Lösung, anhand vom Suchergebnis, müsste ich in einer anderen Datei ebenfalls so weitersuchen und eine Zeile X auslesen.
Ich verstehe kein Wort.

Grüße
rubberman
Bitte warten ..
Mitglied: chgs2011
17.11.2014 um 07:57 Uhr
Danke rubberman, der Ansatz sieht super aus und klappt für einzelne Files!

Ich würde das gerne aber auf mehrere Dateien zeitgleich nutzen, am liebstens würde ich alle Dateien in einem Order Y mit X Unterordner durchsuchen.

Ginge das generell?
Bitte warten ..
Mitglied: rubberman
17.11.2014 um 12:07 Uhr
Hallo chgs2011.

Klar geht das (FOR /R, FOR /F mit DIR /S oder FINDSTR /S). Du musst nur ein paar Infos rausrücken.
  • Bleibt die Suchzeichenfolge für alle Dateien gleich?
  • Was soll mit den gefundenen Werten passieren? (Bildschirmausgabe, in eine andere Datei schreiben, irgendwo weiterverarbeiten ...)
  • Musst du irgend eine Verbindung zu der Datei haben, in der die Suchzeichenfolge gefunden wurde?

Niemand kennt das endgültige Ziel der Aktion, außer du selbst ...

Grüße
rubberman
Bitte warten ..
Mitglied: chgs2011
17.11.2014 um 12:53 Uhr
Ich muss in X Verzeichnissen verschiedene Dateitypen durchsuchen.

Die Struktur ist bislang gleich, habe diese verglichen.

Ich muss lediglich in einer Datei Zeile 10+17 davor ausgeben, das reicht mir vollkommen aus.
Bitte warten ..
Mitglied: rubberman
17.11.2014, aktualisiert um 16:34 Uhr
Hallo chgs2011.

Du hast zwar meine Fragen nicht beantwortet und was nun
in einer Datei Zeile 10+17 davor ausgeben
bedeuten soll ist mir schon wieder gänzlich unklar, aber naja ... dann musst du halt mit dem Vorlieb nehmen, was ich verstanden habe.
01.
@echo off &setlocal DisableDelayedExpansion 
02.
 
03.
set "base=C:\Pfad zu\deinen Dateien" 
04.
set "ext=*.txt *.log *.cache" 
05.
set "search=ABCDE" 
06.
 
07.
pushd "%base%" 
08.
for /f "delims=" %%f in ('dir /a-d /b %ext%') do ( 
09.
  set "file=%%f" 
10.
  call :proc 
11.
12.
popd 
13.
 
14.
pause 
15.
exit /b 
16.
 
17.
 
18.
:proc 
19.
set "num=0" 
20.
for /f "delims=:" %%i in ('findstr /nic:"%search%" "%file%"') do set "num=%%i" 
21.
if %num% equ 0 exit /b 
22.
 
23.
set /a "num -= 17" 
24.
if %num% lss 1 exit /b 
25.
 
26.
set "line=" 
27.
<"%file%" ( 
28.
  for /l %%i in (2 1 %num%) do set /p "=" 
29.
  set /p "line=" 
30.
31.
 
32.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
33.
echo   Datei: "%file%" 
34.
setlocal EnableDelayedExpansion 
35.
echo(!line! 
36.
endlocal 
37.
exit /b
Grüße
rubberman
Bitte warten ..
Mitglied: chgs2011
20.11.2014 um 10:55 Uhr
Danke für die Ausarbeitung, klappt soweit schon sehr gut

Nochmal zum Verständnis, ich möchte einen Textbaustein suchen, den ersten den er findet soll als Bezug dienen.
Von diesem Bezug aus (Zeile 37) soll er dann die Zeile 27 und 20 ausgeben.

Ich habe nun eben festgestellt, dass ich auch Sonderzeichen habe, meine Suche dadurch natürlich nicht klappt.

Suchtext z.B.: <key>order:</key>

Habe es so versucht: ^<key^>order:^</key^>

Aber das will nicht so recht.

Vielen Dank bis dahin!
Bitte warten ..
Mitglied: rubberman
20.11.2014, aktualisiert um 16:26 Uhr
Wenn es sich um XML handeln sollte, ist Batch der falsche Ansatz! Hier hangelt man sich durch das DOM und arbeitet mit Node-Objekten. Somit gibt es auch keine Probleme damit in welcher Zeile nun was zu finden ist, da es für XML sowieso egal ist ob der gesamte Inhalt in einer Zeile oder in 1000 steht. Das nächste Problem ist dass XML wahrscheinlich UTF-8 codiert vorliegt, Batch arbeitet mit ASCII. Etc.

Ich habe langsam keine Ahnung mehr, wie man dir helfen könnte, denn deine Aussage "der Inhalt allerdings ist normaler Text" ist schlicht falsch und Informationen fließen häppchenweise auf Anfrage (wenn überhaupt). Entweder du postest einen kompletten Beispielinhalt deiner Dateien mit Erklärung was genau du darin benötigst, oder ich klinke mich an dieser Stelle aus.

Grüße
rubberman
Bitte warten ..
Mitglied: chgs2011
20.11.2014 um 17:02 Uhr
Danke rubberman, es sind aber leider keine XML-Files, es sind diverse Datenbank-Files eines PDM-Systems.

Diese Dateiendungen werden zudem indexiert und können heißen:
xxxxx.log.1
xxxxx.log.2
xxxxx.log.3
xxxxx.cache.1
xxxxx.cache.2
xxxxx.cache.3


Den Inhalt kann ich aus verschiedenen Gründen nicht ohne weiteres zur Verfügung stellen, sonst hätte ich dies schon getan.

Wie bereits erwähnt klappt soweit die Suche, wenn ich starr nach den Werten suche.
Ich wollte die Suche aber genauer Eingrenzen, eben mit derartigen "Tags" in der Datei, da die gesuchen Werte mehrmals vorkommen.


Beispiel:

Suchbegriff XXX
<id>order: XXX</id>
<key>order: XXX</key>


Wenn ich dann Zeile 10 und 17 davor auslesen muss, ist es wichtig den richtigen Zeilen-Startpunkt zu finden,
daher wollte ich nun den ganzen String suchen:

<key>order: XXX</key>


Mir würde auch ein Platzhalter ausreichen wie:

*key*order*XXX*key*



Sorry für die Umstände, bin leider auch etwas gefesselt.
Bislang bekomme ich halt mit dem Script zuviele Zeilen ausgegeben, die man aber auch manuell von Hand filtern kann.
Bitte warten ..
Mitglied: rubberman
20.11.2014 um 18:19 Uhr
In dem Fall habe ich keine Ahnung warum es nicht funktionieren soll. Mit deinen Beispielstrings habe ich bei meinem oben geposteten Code nicht die geringsten Probleme. Aber auch wie die Umsetzung in deinem eigenen Code aussieht, ist ohne Glaskugel nicht zu erahnen.

es sind aber leider keine XML-Files
Woran machst du das fest? Dass sie eine andere Dateiendung als *.xml haben?

Den Inhalt kann ich aus verschiedenen Gründen nicht ohne weiteres zur Verfügung stellen, sonst hätte ich dies schon getan.
Nonsens. Sensible Daten lassen sich mit jedem x-beliebigen Texteditor entsprechend verfälschen, bevor man den Inhalt postet.

Grüße
rubberman
Bitte warten ..
Mitglied: chgs2011
21.11.2014 um 10:55 Uhr
Ich versuche es zunächst mal so.

Nur eine letzte Frage, der Suchbegriff wird gesucht, er sucht in der Datei aber immer nur die letzte und gibt diese aus.

Was ist mit den Suchergebnissen, die zuvor mehrmals gefunden wurden? Woran liegt das?
Bitte warten ..
Mitglied: rubberman
21.11.2014 um 12:27 Uhr
Liegt an der Schleife in Zeile 20. Die Variable num wird so oft überschrieben, wie die Suchzeichenfolge gefunden wird. Mit dem letzten Wert wird weiter gearbeitet.
Wenn du mehrere Suchergebnisse hast, ist die ganze Sache nicht eindeutig und du hast sowieso ein grundsätzliches Problem. Du musst also schon dafür sorgen, dass deine Suchzeichenfolge auch eindeutig ist.

Grüße
rubberman
Bitte warten ..
Mitglied: chgs2011
27.11.2014 um 16:34 Uhr
So, habe nun paar Tage bissel versucht und analysiert, leider komme ich nicht 100% auf brauchbare Ausgaben.

Ich musste leider feststellen, dass die Datenbank so komplexe Cache-Files erzeugt, dass nicht einmal die Struktur einheitlich ist.

Allerdings habe ich einen anderen Lösungsansatz gefunden, den ich versuche umzusetzen.

Ich danke dir vielmals für die Beispiele, sind bei mir im Archiv, da ich das auf jeden Fall wieder mal brauchen werde!!!

Ich hoffe ich kann auf deine Unterstützung zählen, beim neuen Lösungsansatz?



Lösungsansatz:
Ich möchte nun alle Dateien mit Endung ".lid" in einem Ordner auf Inhalt durchsuchen.
Hierzu möchte ich einen Suchbegriff in Zeile 10 abfragen.
Sollte der Suchbegriff in Zeile 10 vorhanden sein, soll diese Datei kopiert und in einen Unterordner "backup" gelegt werden.

An sich sollte das relativ simpel sein, oder?

Vielen Dank vorab.
Bitte warten ..
Mitglied: rubberman
29.11.2014 um 14:31 Uhr
den ich versuche umzusetzen.
Öhm, dann würde ich das nächste mal gerne deinen noch nicht funktionierenden Versuch sehen.
An sich sollte das relativ simpel sein, oder?
Dann verstehe ich nicht warum du ... ach egal

ungetestet:
01.
@echo off &setlocal DisableDelayedExpansion 
02.
 
03.
set "base=C:\Pfad zu\deinen Dateien" 
04.
set "ext=*.lid" 
05.
set "search=ABCDE" 
06.
 
07.
pushd "%base%" 
08.
2>nul md "backup" 
09.
for /f "delims=" %%f in ('dir /a-d /b %ext%') do ( 
10.
  set "file=%%f" 
11.
  call :proc 
12.
13.
popd 
14.
 
15.
pause 
16.
exit /b 
17.
 
18.
 
19.
:proc 
20.
for /f "delims=:" %%i in ('findstr /nic:"%search%" "%file%"') do if %%i equ 10 ( 
21.
  echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
22.
  echo   Datei: "%file%" 
23.
  copy "%file%" "backup\" 
24.
25.
exit /b
Grüße
rubberman
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch, Suche der Nummer in der Datei!
Frage von SportiiiBatch & Shell8 Kommentare

Hallo, mir wurde bereits durch jodel32 sehr geholfen es fehlt nur ein kleines Stück: Folgendes: Wenn ich eine Nummer ...

Batch & Shell
Batch-Script zum Auslesen eines bestimmten Strings aus bestimmter Zeile aus Text-File
gelöst Frage von aes0p.Batch & Shell13 Kommentare

Hallo! Ich möchte gern via Batch-Script einen String aus einer Text-Datei auslesen. Die Textdatei hat folgenden Inhalt: vssadmin 1.1 ...

PHP
TXT Datei auslesen und bestimmte Zeilen in Variable setzen
gelöst Frage von 126594PHP11 Kommentare

Hallo zusammen, vorweg muss ich sagen, ich bin (bis jetzt) absoluter Neuling was PHP angeht. Ich will aus einer ...

Batch & Shell
Shell Script nach bestimmten Zeilen in einer Datei suchen
gelöst Frage von windelterroristBatch & Shell4 Kommentare

Hallo, Ich würde gerne wissen, wie ich im Shell Script nach einer Zeile in einer bestimmten Datei (z.B. test01) ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 16 StundenMicrosoft Office6 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 18 StundenDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 19 StundenSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 22 StundenMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...

Server-Hardware
Veeam Backup Server stürzt alle paar Tage ab
Frage von Leo-leServer-Hardware12 Kommentare

Hallo Forum, ich habe momentan folgendes Problem. Veeam Backup and Replication 9.5 u2 auf voll gepatchten DL 380 G7 ...

Windows 10
Windows10-Schnellzugriff per Kommandozeile bearbeiten
Frage von SarekHLWindows 1010 Kommentare

Hallo zusammen, weiß jemand, wie ich per Kommandozeile (in einem Logon-Script) den persönlichen Dokumentenordner aus dem Schnellzugriff entferne den ...

Batch & Shell
Dateien verschieben mit batch
gelöst Frage von michi-ffmBatch & Shell10 Kommentare

Hallo Zusammen hat jemand evtl eine Idee? Zunächst hier das Skript: Leider werden keine UNC-Pfade unterstüzt, kann mir jemand ...