gelöst Problem bei Ausgabe der Folgezeile bei Abfrage aus .pro Datei
Hallo zusammen,
ich habe ein kleines Problem. Ich möchte mehrere .pro Datein nach bestimmten Einträgen durchsuchen und diese dann in einer CSV Tabelle ausgeben. Das klappt soweit schon ganz gut, sofern die entsprechenden Einträge, nach denen ich suche nur einmal vorkommen. Bei mehrfachnennung wird immer nur der letzte Beitrag ausgegeben... aber das ist hier nicht ganz das Problem...
Problem ist, dass wenn ein Eintrag mehrfach vorkommt dieser in den .pro Dateien selbst durch eine IF anweisung mehrere möglichkeiten der Wertzuweiung hat.
Ich möchte nun auch diese IF - Anweisung in die CSV Tabelle integieren.
Die .pro Datein haben folgenen Aufbau:
meine batch durchsucht schon alle Files und gibts sie wunderbar hübsch aus... ich bekomme auch eine konkrete Zeilenangabe, in der die Werte stehen, die ab und an durch IF - Anweisungen verschachtelt sind... Nun möchte ich einfach auf die vorgängerzeile zugreifen, und da liegt mein Problem:
mir wird hier zwar die richtige Zeilennummer ausgegeben, aber der Inhalt der Zeile fehlt vollkommen, bzw. wird wohl nicht gefunden.
(%1 ist die aktuelle .pro Datei)
Dazu hab ich auch schon google und co. befragt, https://www.administrator.de/index.php?content=148293 das hinter dem Link versteckte ähnliche Problem mehrfach nahezu Zeichen für Zeichen eingetippt... aber es will einfach nicht funktionieren.
Sieht jemand von euch den Fehler, oder hat eine bessere Idee?
ich habe ein kleines Problem. Ich möchte mehrere .pro Datein nach bestimmten Einträgen durchsuchen und diese dann in einer CSV Tabelle ausgeben. Das klappt soweit schon ganz gut, sofern die entsprechenden Einträge, nach denen ich suche nur einmal vorkommen. Bei mehrfachnennung wird immer nur der letzte Beitrag ausgegeben... aber das ist hier nicht ganz das Problem...
Problem ist, dass wenn ein Eintrag mehrfach vorkommt dieser in den .pro Dateien selbst durch eine IF anweisung mehrere möglichkeiten der Wertzuweiung hat.
Ich möchte nun auch diese IF - Anweisung in die CSV Tabelle integieren.
Die .pro Datein haben folgenen Aufbau:
01.
LET Gruppe = '01'
02.
LET Stufe = '3'
03.
LET Spezifisch = '021'
04.
IF (X$Z.GE.2600) THEN
05.
LET Stat = 'STATION2OHNE'
06.
ELSE
07.
LET Stat = 'STATION2'
08.
ENDIF
01.
for /f "delims=:" %%i in ('findstr /i /n "LET.Stat" %1') do set /a zeile=%%i-3>nul
02.
03.
echo Zeile: %zeile%>>"%PFile%"
04.
05.
for /f "delims=: tokens=1,*" %%a in ('findstr /i /n /b "%zeile%" %1') do echo Eintrag: %%a;%%b>>"%PFile%"
(%1 ist die aktuelle .pro Datei)
Dazu hab ich auch schon google und co. befragt, https://www.administrator.de/index.php?content=148293 das hinter dem Link versteckte ähnliche Problem mehrfach nahezu Zeichen für Zeichen eingetippt... aber es will einfach nicht funktionieren.
Sieht jemand von euch den Fehler, oder hat eine bessere Idee?
6 Antworten
- LÖSUNG bastla schreibt am 26.11.2010 um 09:53:47 Uhr
- LÖSUNG oeNkraD schreibt am 26.11.2010 um 10:52:23 Uhr
- LÖSUNG bastla schreibt am 26.11.2010 um 12:15:53 Uhr
- LÖSUNG oeNkraD schreibt am 26.11.2010 um 12:26:54 Uhr
- LÖSUNG Biber schreibt am 26.11.2010 um 12:37:45 Uhr
- LÖSUNG bastla schreibt am 26.11.2010 um 12:52:54 Uhr
- LÖSUNG oeNkraD schreibt am 26.11.2010 um 12:26:54 Uhr
- LÖSUNG bastla schreibt am 26.11.2010 um 12:15:53 Uhr
- LÖSUNG oeNkraD schreibt am 26.11.2010 um 10:52:23 Uhr
LÖSUNG 26.11.2010 um 09:53 Uhr
Hallo oeNkraD und willkommen im Forum!
Da ja in der Datei nicht die Zeilennummern stehen, müsste das eher so aussehen (ungetestet):
Grüße
bastla
[Edit] Fehlendes "^" nachgetragen und Ausgabeumleitung vor dem "echo" platziert [/Edit]
Da ja in der Datei nicht die Zeilennummern stehen, müsste das eher so aussehen (ungetestet):
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" %1^|findstr /b "%zeile%:"') do >>"%PFile%" echo Eintrag: %%a;%%b
bastla
[Edit] Fehlendes "^" nachgetragen und Ausgabeumleitung vor dem "echo" platziert [/Edit]
LÖSUNG 26.11.2010 um 10:52 Uhr
Nun... außer der Tatsache, dass durch die kleinen Änderungen jetz der komplette Schleifenablauf für den Aufruf der einzelnen .pro Datein im ersten durchlauf abgebrochen wird und dennoch die gewünschte Zeile nicht ausgegeben wird, hat sich nichts verändert...
hier mal der komplette Code:
hier mal der komplette Code:
01.
@echo off & setlocal
02.
set "Verz=D:\Neuer Ordner\Neuer Ordner\Neuer Ordner"
03.
set "End=*.pro"
04.
set "M50=LET.Stat"
05.
06.
del "Ifsuche.txt"
07.
for /f %%a in ('dir /b /on "%Verz%\%End%"') do call :ProcessFile "%Verz%\%%a"
08.
09.
start "" "Ifsuche.txt"
10.
11.
goto :eof
12.
13.
:ProcessFile
14.
set "FName=%~n1"
15.
set "WDPL=%FName:~0,20%
16.
set "PFile=Ifsuche.txt"
17.
18.
19.
if exist "%PFile%" goto :WriteLine
20.
21.
22.
:WriteLine
23.
24.
echo WDPL_Bez;%WDPL%>>"%PFile%"
25.
echo Station:>>"%PFile%"
26.
for /f "delims=:" %%i in ('findstr /i /n "%M50%" %1') do set /a zeile=%%i>nul
27.
28.
echo Zeile: %zeile%>>"%PFile%"
29.
30.
for /f "tokens=1,* delims=:" %%a in ('findstr /n "^" %1 | findstr /b "%zeile%:"') do echo Eintrag: %%a;%%b>>"%PFile%"
31.
32.
echo.>>"%PFile%"
LÖSUNG 26.11.2010 um 12:15 Uhr
Hallo oeNkraD!
Da fehlte leider eine Kleinigkeit (ist inzwischen auch oben nachgetragen) ...
Versuch es damit:
Grüße
bastla
Da fehlte leider eine Kleinigkeit (ist inzwischen auch oben nachgetragen) ...
Versuch es damit:
01.
@echo off & setlocal
02.
set "Verz=D:\Neuer Ordner\Neuer Ordner\Neuer Ordner"
03.
set "End=*.pro"
04.
set "M50=LET.Stat"
05.
set "PFile=Ifsuche.txt"
06.
07.
del "%PFile%" 2>nul
08.
for /f %%a in ('dir /b /on "%Verz%\%End%"') do call :ProcessFile "%Verz%\%%a"
09.
10.
start "" "%PFile%"
11.
goto :eof
12.
13.
:ProcessFile
14.
set "FName=%~n1"
15.
set "WDPL=%FName:~0,20%
16.
17.
>>"%PFile%" echo WDPL_Bez;%WDPL%
18.
>>"%PFile%" echo Station:
19.
for /f "delims=:" %%i in ('findstr /i /n "%M50%" %1') do set /a zeile=%%i >nul
20.
>>"%PFile%" echo Zeile: %zeile%
21.
for /f "tokens=1,* delims=:" %%a in ('findstr /n "^" %1^|findstr /b "%zeile%:"') do >>"%PFile%" echo Eintrag: %%a;%%b
22.
>>"%PFile%" echo.
23.
goto :eof
bastla
LÖSUNG 26.11.2010 um 12:26 Uhr
grandios!
Vielen Dank für die fixe Hilfe
Aber sage mir noch, bevor ich das als gelöst anklicke:
Warum wird das >>"%PFile%" vor das echo geschrieben?
Die Ausgabe funktionierte doch sonst auch uneingeschränkt... nur hier spontan nicht mehr *grübel*
Ach und wie kann man in: findstr /n "^" %1^|findstr /b "%zeile%:" das circumflex vor dem Pipesymbol interpretieren? Bzw. besser ausgedrück, wie kann man seine Bedeutung auf deutsch ausdrücken?
Gruß
Alex
Vielen Dank für die fixe Hilfe
Aber sage mir noch, bevor ich das als gelöst anklicke:
Warum wird das >>"%PFile%" vor das echo geschrieben?
Die Ausgabe funktionierte doch sonst auch uneingeschränkt... nur hier spontan nicht mehr *grübel*
Ach und wie kann man in: findstr /n "^" %1^|findstr /b "%zeile%:" das circumflex vor dem Pipesymbol interpretieren? Bzw. besser ausgedrück, wie kann man seine Bedeutung auf deutsch ausdrücken?
Gruß
Alex
LÖSUNG 26.11.2010 um 12:37 Uhr
Moin DunkelNeuer,
willkommen im Forum.
Oder, wie es auch oft formuliert wird: das nachfolgende Zeichen wird "maskiert".
Nötig ist es in diesem Fall, weil ein CMD-Befehl mit einem darin enthaltenen Pipe-Symbol quasi als Parameter an eine weitere CMD-Instanz weitergereicht werden soll.
Grüße
Biber
willkommen im Forum.
Zitat von oeNkraD:
Ach und wie kann man in: findstr /n "^" %1^|findstr /b "%zeile%:" das circumflex vor dem Pipesymbol interpretieren?
Bzw. besser ausgedrück, wie kann man seine Bedeutung auf deutsch ausdrücken?
Das Caret gibt dem CMD-Interpreter den Tipp, das auf "^" folgende Zeichen als Literal (Buchstaben ohne Steuerzeichenbedeutung) aufzufassen.Ach und wie kann man in: findstr /n "^" %1^|findstr /b "%zeile%:" das circumflex vor dem Pipesymbol interpretieren?
Bzw. besser ausgedrück, wie kann man seine Bedeutung auf deutsch ausdrücken?
Oder, wie es auch oft formuliert wird: das nachfolgende Zeichen wird "maskiert".
Nötig ist es in diesem Fall, weil ein CMD-Befehl mit einem darin enthaltenen Pipe-Symbol quasi als Parameter an eine weitere CMD-Instanz weitergereicht werden soll.
Grüße
Biber
LÖSUNG 26.11.2010 um 12:52 Uhr
Hallo oeNkraD!
würde zB bei einem Wert der Variablen %Zahl% von 2 die Meldung "ECHO ist eingeschaltet (ON)." und eine leere Datei.txt produzieren, da eben nach Variablenauflösung der Befehl
- also eine Umleitung von STDERR (=des Kanals für Fehlermeldungen) - ergäbe und so nur noch "echo" ausgeführt (und, da bei der Ausführung des Befehls kein Fehler auftritt, genau nix in die Datei.txt geschrieben) würde; bei vorangestellter Umleitung kann es nicht dazu kommen ...
Grüße
bastla
Warum wird das >>"%PFile%" vor das echo geschrieben?
Einerseits wird's (zumindest für mich) dadurch übersichtlicher, andererseits gibt es gelegentlich unschöne Effekte - die Zeileecho %Zahl%>Datei.txt
echo 2>Datei.txt
Grüße
bastla
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte