Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

DOS PROMPT Befehl... mit Batch-Quelldatei und Zeilennummer

Mdl / 5 Antworten / Flachansicht Nickles

Habe gerade in einem DOS-Batchfile, mit verschachtelten CALL-Aufrufen eine Fehlermeldung bekommen und muss jetzt mühsam die entsprechende Quelldatei/Zeile finden, in der dieser Fehler aufgetreten ist.

Dabei kam mir die Idee, dass doch eigentlich die Prompt-Funktion, d.h. der Text, der bei einer DOS-Eingabe als Prefix erscheint mir diese Information liefern könnte. Statt also z.B.   
  PROMPT $p$g
könnte so etwas wie
  PROMPT $%current_batchfile%$%current_batchline%$g
stehen.

Dieser Befehl dient nur zur Verdeutlichung, was ich eigentlich will. Dass dies genau so natürlich nicht funktioniert ist klar. Aber vielleicht  gibt es eine solche Funktionalität.

Dies wäre super-praktisch, weil man so direkt sehen würde, in welchem File und welcher Zeilennummer eine Fehlermeldung auftaucht.

Viele Grüße.
Mdl

bei Antwort benachrichtigen
xaver4 Mdl „Hallo Xaver, ehrlich gesagt, ich weiß nicht, was Deine ...“
Optionen

Hi Mdl,

ehrlich gesagt, ich weiß nicht, was Deine Zeile macht. Ich habe sie mal einfach so eingegeben und sie erzeugt eine leere Datei.

na gut, ich hätte als Beispiel-Suchstring vielleicht nicht gerade "00" angeben sollen :-]

echo.|time|find "00">>test.txt gibt auf dem Screen die Systemzeit aus, durch den Pipe | (=Verkettung) wird die Zeitausgabe aber an Find übergeben, der den 'Zeitstring' auf die Zeichenfolge "00" 'untersucht' (= 00 sek,min,std) und wenn zutreffend in die Datei test.txt schreibt

Wenn Du diese Befehlszeile innerhalb einer Schleife ausführst, bekämest Du folglich eine fortlaufende Zeitausgabe, wenn die Bedingung 00 vorhanden ist.
(Sinnlos, war aber auch nur ein Beispiel!)
        ------------------------------- schnipp ----------------------------
Meine Idee war, dass Du innerhalb eines calls den errorlevel abfragst, in eine "err.tmp"-Datei schreiben lässt und anschliessend, in der äußeren batch, nach jedem einzelnen call, diese Datei auf einen Fehler-Errorlevel, z.B. in der Form

  • type err.tmp|find "%E%" >>Fehler.txt.

("%E%" ist Beispiel für die in der Variablen gespeicherten Wert des errorlevels) testest.

Tritt kein Fehler auf, wird nicht in die Datei geschrieben

    Setzt man zusätzlich am Anfang jeder über call aufgerufen "Tochter-batch" eine dafür
    charakteristischen Variable über set=... und schreibt sie über ..

  • echo "Var" >>err.tmp
  • echo.>>err.tmp

erhält man z.B. eine 'Fehler.txt'-Textdatei in der Form:
 
#1
#2
    ...
#5
7
#6
#7
1
#8
usw.

Im Beispiel oben, liefert also call #5 und #7 einen errorlevel <> 0 zurück,
wodurch man die fehlerhaften calls identifiziert hätte Cool

Diese Textdatei kann man am Ende der batch per type auf dem Bildschirm ausgeben
oder anschliessend via explorer im Texteditor anschauen.
---
Deine Idee den Prompt für die Ausgabe zu benutzen, ließe sich, vermute ich, auf ähnliche Weise realisieren, indem du via set glob. variablen in jedem call setzt (eine für Nummerierung und eine für den errorlevel) und in den Prompt-String integrierst.
vor Beendigung, am Ende der batch ein
echo.
pause
ließe Dich das Ergebnis auf dem screen sehen

Das müsstets du dann ausprobieren Unschuldig

vg xaver






bei Antwort benachrichtigen