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
GELÖST

Text suchen und Folgezeile ausgeben

Frage Entwicklung Batch & Shell

Mitglied: timemaster

timemaster (Level 1) - Jetzt verbinden

24.11.2008, aktualisiert 27.11.2008, 8405 Aufrufe, 23 Kommentare

Hallo,

ich möchte aus einer Text-Datei eine Zeichenfolge suchen lassen und einen Teil der Folgezeile ausgeben.

In der Textdatei steht beispielsweise:
[text1]
path=c:\ordner1\unterordner
[text2]
path=d:\ordner2\

Ich möchte nun gerne nach [text1] suchen lassen und den Pfad c:\oderner1\unterordner ausgeben lassen. Der Suchtext steht nicht unbedingt an erster Stelle, wie in diesem Beispiel.

Habe es mit einer FOR-Schleife und mit FINDSTR versucht, aber leider kenne ich mich zu wenig mit diesen Befehlen aus.

Danke schon mal vorab!

Gruß
Bitbutcher1
Mitglied: Biber
24.11.2008 um 11:09 Uhr
Moin Bitbutcher1,

das solltest Du mit diesen beiden Zeilen am CMD-Prompt hinbekomen:
01.
for /f "delims=:" %i in ('findstr /i /n "text1" %temp%\bb.ini') do @set /a theNextline=%i +1>nul 
02.
for /f "delims=: tokens=1,*" %i in ('findstr /i /n $ %temp%\bb.ini^|findstr "^%theNextLine%"') do @echo set "lineText=%j"
Ausgabe:
01.
set "lineText=path=c:\ordner1\unterordner"
Mimik:
Deine Ini-Datei ist bei mir %temp%\bb.ini. Anpassen bitte.
1. Zeile - Zeilennummer der Zeile, die "text1" enthält, in Variable %theNextLine% merken (und gleich 1 addieren)
2. Zeile - jetzt nochmal die Ini-Datei durchflöhen, aber umgekehrt: nur (Zeile+1) rausfieseln.
Und die ganze Zeile in %Linetext% speichern (hier nur mit "echo set" statt "set" angedeutet.

Wenn Du auch zum richtigen Ergebnis kommst, dann im Batch alle %i durch %%i und %j durch %%j ersetzen.

Grüße
Biber
Bitte warten ..
Mitglied: timemaster
24.11.2008 um 12:26 Uhr
Hallo Biber,

danke erstmal für die Antwort.

Leider bekomme ich so noch keine Ausgabe. Ich muss allerdings auch gestehen, dass ich mich nicht so gut in diesem Thema auskenne.

Den Text habe ich folgendermaßen in eine Batch-Datei eingebunden:

@echo off
for /f "delims=:" %%i in ('findstr /i /n "text1" c:\programme\odrner\unterordner\test.cfg') do @set /a theNextline=%%i +1>nul
for /f "delims=: tokens=1,*" %%i in ('findstr /i /n $ c:\programme\odrner\unterordner\test.cfg^|findstr "^%theNextLine%"') do @echo set "lineText=%%j"
pause

Eine Ausgabe erhalte ich aber nicht. Auch die Variablen geben über Echo im CMD-Prompt keinen Wert aus.

Was mache ich falsch?

Gruß
Bitbutcher1
Bitte warten ..
Mitglied: Biber
24.11.2008 um 12:45 Uhr
Moin Bitbutcher1,

deshlab war ja mein Vorschlag
Wenn Du auch zum richtigen Ergebnis kommst, dann im Batch alle %i durch %%i und %j durch %%j ersetzen.

-> Spiel die beiden Zeilen erstmal "trocken", am CMD-Prompt durch.
Denn dort kannst Du ja erstmal sehen, was das Ergebis des einen oder des anderen schrittes wäre.

Vermutung:
  • Falls der Pfad zur test.cfg auch Leerzeichen enthält, dann setze diesen ganzen Pfad+Dateiname auch in Anführungszeichen.
  • und ersetze in der zweiten Zeile das "@echo set linetext=%%i" durch ein "set linetext=%%i" (das war ja am CMD nur "angedeutet, s.o.)
  • was eventuell im Batch eine Verdoppelung werden müsten, ist in der zweiten Zeile das Caret ("^" ) bei
>... findstr "^thenextLine%"
Damit (mit dem FindStr-Parameter ^=Caret ) wollte ich ja nur am Zeilenanfang siuchen, aber das ändere Bitte in
.. findstr /B "thenextLine%:"

Und, wie geschrieben, erst trocken am CMD-Prompt testen, dannch in einen batch gießen.

Grüße
Biber
Bitte warten ..
Mitglied: timemaster
24.11.2008 um 16:45 Uhr
Hallo Biber,

ich habe den Vorcchlag sowohl mit %i bzw. %j über CMD-Prompt als auch mit %%i und %%j in einer Batch-Datei getestet. Leider ohne Erfolg!

Sobald ich über CMD-Prompt die beschriebenen Befehlsfolgen eintrage und bestätige, erhalte ich hier keine Ausgabe und lande sofort wieder im CMD-Prompt. Ich habe jede For-Anweisung einzeln bestätigt.

Der Pfad zur Datei \"test.cfg\" enthält keine Leerzeichen.

Kann es am Betriebssystem liegen (Windows XP)?

Gruß
Bitbutcher1
Bitte warten ..
Mitglied: Biber
24.11.2008 um 17:04 Uhr
Moin Butbitcher1,

da bin ich auch etwas ratlos jetzt - ich habe es auch auf XP angetestet:
01.
(=16:58:04  D:\temp=) 
02.
>type %temp%\bb.ini 
03.
In der Textdatei steht beispielsweise: 
04.
[text1] 
05.
path=c:\ordner1\unterordner 
06.
[text2] 
07.
path=d:\ordner2\ 
08.
 
09.
(=16:58:50  D:\temp=) 
10.
>for /f "delims=:" %i in ('findstr /i /n "text1" %temp%\bb.ini') do @set /a theNextline=%i +1>nul 
11.
 
12.
(=16:59:15  D:\temp=) 
13.
>set the 
14.
theNextline=3 
15.
 
16.
(=16:59:24  D:\temp=) 
17.
>for /f "delims=: tokens=1,*" %i in ('findstr /i /n $ %temp%\bb.ini^|findstr "^%theNextLine%"') do @echo set "lineText=%j" 
18.
set "lineText=path=c:\ordner1\unterordner" 
19.
### die andere FindStr-Variante: geht genauso: 
20.
>for /f "delims=: tokens=1,*" %i in ('findstr /i /n $ %temp%\bb.ini^|findstr /b "%theNextLine%:"') do @echo set "lineText=%j" 
21.
set "lineText=path=c:\ordner1\unterordner" 
22.
 
Ich bekomme also zumindest am CMD-Prompt das, was ich erwartet habe.
Da müssen wir mal einen moment warten, bis bastla diesen thread entdeckt... der hat einen geübteren Blick für solche Denkfehler.
Ich komme erst heute abend dazu, das noch mal in Ruhe anzuschauen, sorry.

Grüße
Biber
Bitte warten ..
Mitglied: timemaster
25.11.2008 um 09:19 Uhr
Hallo Biber,

leider bin ich immer noch nichts weiter. Ich habe auch zwischenzeitlich auf einem Windows 2000 System getestet.

Ich gehe doch recht in der Annahme, dass die Zeile 13 die Ausgabe zu Zeile 10 und die Zeile 18 die Ausgabe zu Zeile 17 ist?

Folgende Eingaben habe ich unter Start->Ausführen->CMD gemacht:

C:\>for /f "delims=:" %i in ('findstr /i /n "test" c:\programme\ordner\unterordner1\unterordner2\test.cfg') do @set /a theNextLine=%i +1>nul

C:\>for /f "delims=: tokens=1,*" %i in ('findstr /i /n $ c:\programme\ordner\unterordner1\unterordner2\test.cfg^|findstr /b "%theNextline%:"') do @echo set "lineText=
%j"

C:\>


Hoffentlich fällt Euch noch etwas auf. Ich bin völlig ratlos.


Gruß
Bitbutcher1
Bitte warten ..
Mitglied: bastla
26.11.2008 um 12:56 Uhr
Hallo Bitbutcher1!

Die schlechte Nachricht (für Dich, nicht für Biber ): Die beiden von Dir (leider nicht als Code) geposteten CMD-Zeilen tun bei mir, was sie sollen - für die Testdatei
[text1] 
path=c:\ordner1\unterordner 
[mit TMWin] 
path=c:\ordner3\unterordner 
[text2] 
path=d:\ordner2\
erhalte ich nach Ausführung beider Zeilen folgende Ausgabe:
set "lineText=path=c:\ordner3\unterordner"
Fehlerursachen bei Dir könnten sein:
  • Falscher Pfad zur "install.cfg" - solltest Du bereits bemerkt haben, wenn die Datei an diesem Ort nicht zu finden ist, da "findstr" eine Fehlermeldung ausgibt; die Möglichkeit, dass verschiedene "install.cfg" vorhanden wären und der Pfad zu falschen Version zeigt, sollte ja eigentlich auszuschließen sein.
  • Falsche Angabe des Suchbegriffes (Groß-/Kleinschreibung als Ursache fällt aus, da diese bei der Suche [siehe "/i"] ignoriert wird - um das zu demonstrieren, habe ich bei meinem Test die Schreibweise variiert); darunter fiele auch ein "Nicht-ASCII/ANSI"-Format der "install.cfg".

Du solltest daher zunächst einmal die Suche testen:
findstr /i /n "tmwin" c:\programme\elv\tmwin\einstellungen\install.cfg
müsste als Ergebnis eine Zeile der Art
3:[mit TMWin]
bringen.

Grüße
bastla
Bitte warten ..
Mitglied: timemaster
26.11.2008 um 15:12 Uhr
Hallo bastla,

danke für die Rückinfo. Die Eingabe bringt bei mir folgende Rückmeldung:

C:\>findstr /i /n "test" c:\programme\odrner\unterordner1\unterordner2\test.cfg
1:[test]
2:Path=c:\ordner\unterordner\
4:Path=d:\ordner\

Ist demnach in Ordnung, oder?

Nun muss ich aus diesem Ergebnis nur noch den Pfad "c:\ordner\unterordner\" ausgegeben bekommen.

Gruß
Bitbutcher1
Bitte warten ..
Mitglied: bastla
26.11.2008 um 18:31 Uhr
Hallo Bitbutcher1!

Ist demnach in Ordnung, oder?
Mitnichten - die Zeilen 2 und 4 enthalten den Suchbegriff nicht und dürften daher auch nicht ausgegeben werden.

Könntest Du den Inhalt der "test.cfg" posten, und dabei die Tags (jeweils ohne die Leerzeichen an der 2. Stelle)
< code type="plain">
vor der ersten Zeile und
< /code>
nach der letzten Zeile verwenden?

Grüße
bastla
Bitte warten ..
Mitglied: timemaster
27.11.2008 um 08:31 Uhr
Hallo bastla,

ich habe das Problem erkannt. Es liegt daran, dass der Suchtext "test" auch in den Pfadangaben in der Datei "test.cfg" steht. Hätte ich auch eher sehen können

Den Suchtext habe ich versucht auf "[test]" in der Findstr-Abfrage einzubauen:

C:\>findstr /i /n "[test]" c:\programme\elv\tmwin\ein
stellungen\install.cfg
1:[test]
2:Path=c:\ordner\test\
3:[demo]
4:Path=d:\ordner\test\

Leider wird hier alles ausgegeben.

Vielleicht noch eine Idee, wie ich das Problem umgehen könnte?


Gruß
Bitbutcher1
Bitte warten ..
Mitglied: bastla
27.11.2008 um 09:42 Uhr
Hallo Bitbutcher1!

Na ja, eine hab ich noch:
findstr /i /n "\[test\]" c:\programme\elv\tmwin\einstellungen\install.cfg
Grüße
bastla
Bitte warten ..
Mitglied: timemaster
27.11.2008 um 10:09 Uhr
Hallo bastla,

wir kommen der Sache näher. Mit dieser Eingabe erhalte ich die gewünschte Zeile:

1:[test]

Leider kommt bei der Einbindung in die FOR-Schleife immer noch keine Rückmeldung. Lande wieder einfach nur im CMD-Prompt. Ich habe die Abfrage folgendermaßen ausgeführt:

C:\>findstr /i /n "\[test\]" c:\programme\elv\tmwin\einstellungen\install.cfg
1:[test]

C:\>for /f "delims=:" %i in ('findstr /i /n "\[tmwin\]" c:\programme\elv\tmwin\einstellungen\install.cfg') do @set /a theNextline=%i +1>nul

C:\>

Hast Du dafür auch noch eine zündende Idee?


Danke und Gruß
Bitbutcher1
Bitte warten ..
Mitglied: bastla
27.11.2008 um 10:41 Uhr
Hallo BitButcher1!

Wenn Du Dich zwischen "[test]" und "[tmwin]" entschieden hast, können wir weiter sehen ...

... und damit es auch etwas zu sehen gibt, lass das "@" vor "set" weg.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
27.11.2008 um 10:44 Uhr
Moin Bitbutcher1,

in der FOR /F -Anweisung suchst Du aber auch noch nach den String "[tmwin]"... und der ist eigentlich aus einem anderen Test....

Grüße
Biber
[Edit] P.S. Biber grüßt alle Rechtsüberholer. [/Edit]
Bitte warten ..
Mitglied: timemaster
27.11.2008 um 11:37 Uhr
Hallo bastla, Hallo biber,

sorry für meinen Beitrag. Ich habe den Text teilweise nachträglich editiert.

Hier nochmals die richtigen Eingaben:

C:\>findstr /i /n "\[tmwin\]" c:\programme\elv\tmwin\einstellungen\install.cfg
1:[tmwin]

C:\>for /f "delims=:" %i in ('findstr /i /n "\[tmwin\]" c:\programme\elv\tmwin\e
instellungen\install.cfg') do @set /a theNextline=%i +1>nul

C:\>for /f "delims=:" %i in ('findstr /i /n "\[tmwin\]" c:\programme\elv\tmwin\e
instellungen\install.cfg') do set /a theNextline=%i +1>nul

C:\>set /a theNextline=1 +1 1>nul

C:\>

Ohne "@" vor "set" gibt er nur den Text aus der Eingabe aus, nicht den gewünschten Wert.

Ich hoffe ihr verzeifelt nicht an meinen Kommentaren!


Danke nochmals vorab und Gruß
Bitbutcher1
Bitte warten ..
Mitglied: bastla
27.11.2008 um 12:01 Uhr
Hallo Bitbutcher1!

Schaut doch gut aus - die Variable %theNextline% erhält ja die Zeilennummer der gesuchten Zeile, nämlich 1 + 1 = 2

Jetzt nur noch
for /f "delims=: tokens=1,*" %i in ('findstr /i /n $ c:\programme\elv\tmwin\einstellungen\install.cfg^|findstr /b "%theNextline%:"') do @echo set "lineText=%j"
und das sollte es gewesen sein ...

Grüße
bastla
Bitte warten ..
Mitglied: timemaster
27.11.2008 um 12:11 Uhr
Thanx bastla,

man sieht den Wald vor lauter Bäumen nicht!

Dann ist es bestimmt auch ein leichtes die Ausgabe nur auf den Pfad (Bsp.: c:\elv\tmin , also ohne "lineText=Path=") zu beschränken, oder?


Gruß
Bitbutcher
Bitte warten ..
Mitglied: bastla
27.11.2008 um 12:39 Uhr
Hallo BitButcher1!

Wollen wir das Beste hoffen:
for /f "tokens=1,2,* delims=:=" %i in ('findstr /i /n $ c:\programme\elv\tmwin\einstellungen\install.cfg^|findstr /b "%theNextline%:"') do @echo set "lineText=%k"
Grüße
bastla
Bitte warten ..
Mitglied: timemaster
27.11.2008 um 14:33 Uhr
Hallo Bastla,

das ist schon fast so wie es sein sollte. Leider fehlt hier dann vermutlich aufgrund des tokens der Laufwerksbuchstabe.

Es wird \elv\tmwin\ anstatt c:\elv\tmwin\ ausgegeben.


Gruß
Bitbutcher1
Bitte warten ..
Mitglied: bastla
27.11.2008 um 15:08 Uhr
Hallo Bitbutcher1!

Soferne die Zeile immer noch den Aufbau
Path=c:\ordner\unterordner\
hat, ist das nicht nachvollziehbar - getrennt wird bei ":" und "=" (falls das von Dir durch "delims=:=" angegeben wurde), sodass folgende Token entstehen müssten:

Token 1 = Zeilennummer (im Beispiel: 2)
Token 2 = "Path"
Token 3 = Rest der Zeile (nach dem "=" hinter "Path")

Grüße
bastla
Bitte warten ..
Mitglied: timemaster
27.11.2008 um 16:34 Uhr
Hallo bastla,

der Aufbau hat sich nicht geändert.

Ich verstehe es aber doch richtig, dass das mit "delims=:" nach einem Doppelpunkt gesucht wird. Somit gibt die Schleife dann doch nur den Rest nach Path=c: aus, oder?

Die Eingabe lautet:

C:\>for /f "delims=: tokens=1,2,*" %i in ('findstr /i /n $ c:\programme\elv\tmwin\einstellungen\install.cfg^|findstr /b "%theNextline%:"') do @echo set %k 
set \elv\tmwin\
Analog dazu die geänderte Eingabe:

C:\>for /f "delims=: tokens=1,2,*" %i in ('findstr /i /n $ c:\programme\elv\tmwin\einstellungen\install.cfg^|findstr /b "%theNextline%:"') do @echo set %j 
set Path=c

Noch eine Idee?


Gruß
Bitbutcher1
Bitte warten ..
Mitglied: bastla
27.11.2008 um 17:36 Uhr
Hallo Bitbutcher1!
Noch eine Idee?
Eigentlich noch immer die selbe wie vorhin: Verwende bitte
delims=:=
(ja, genau so wie ich das jetzt zum dritten Mal geschrieben habe) ...

Grüße
bastla
Bitte warten ..
Mitglied: timemaster
27.11.2008 um 20:16 Uhr
Thanx bastla,

hat geklappt!


Schöne Grüße
Bitbutcher1
Bitte warten ..
Ähnliche Inhalte
VB for Applications
Text mit Msgbox Ausgeben bei verarbeitung
gelöst Frage von VBSnoob123VB for Applications1 Kommentar

Hallo, hat sich erledigt. hab mich entschlossen das Script in Html darzustellen und die anzeige direkt mit in die ...

Batch & Shell
Ergebnis in Text datei ausgeben
gelöst Frage von caschoplBatch & Shell2 Kommentare

Hallo, irgendwie stehe ich auf dem schlauch. Habe folgende Batch erstellt, aber der Text wier immer überschrieben. Das ergebnis ...

VB for Applications
Dateien nach "Text" durchsuchen und Pfad ausgeben
Frage von chgs2011VB for Applications32 Kommentare

Hallo, ich suche dringend ein kleines VBScript. Das Script soll einen bestimmt Text in Dateien suchen, den der Benutzer ...

Batch & Shell
Batch: text mit fester Länge am Bildschirm ausgeben
gelöst Frage von joemouthBatch & Shell2 Kommentare

Hallo Freunde der gepflegten Batchprogrammierung, ich möchte Text aus SET Variablen mit fester Länge per echo ausgeben. Ziel ist ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 6 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 10 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware8 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...