haubentaucher0815
Goto Top

Wert aus C-Programm in Batch verwenden

Ich suche eine Problemlösung für folgenden Fall ...

Ich muss in wiederkeherenden Fällen in einer Batch unterschiedliche Inhalte aus LOG Files weiterverarbeiten ...

Dazu möchte ich aus der Batch ein C-Programm aufrufen, welches mir die entsprechenden Werte liefert.

Wie bekomme ich den Wert aus dem C-Programm zurück in die Batch, um sie dann in einer Variable weiterzuverwerten ?

Bislang ist mir als Lösung nur eingefallen, den Wert aus dem C-Programm in eine TXT Datei zu schreiben, und diese dann per Batch auszulesen ...

hier:

set /p VARIABLENNAME=<DATEINAME.TXT



Aber das ist irgendwie nicht wirklich schön gelöst ...

Content-Key: 26182

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

Ausgedruckt am: 29.03.2024 um 14:03 Uhr

Mitglied: fachinformatiker
fachinformatiker 16.02.2006 um 15:39:26 Uhr
Goto Top
Nicht schön gelöst, aber es geht schonmal.
Eine andere Lösung die mir einfällt ist eine Batch aus dem C-Programm mit den Variablen als Parameter zu starten. Vielleicht gefällt dir das besser ?
Eine dritte Möglichkeit fällt mir gerade auch nicht ein.
Mitglied: Haubentaucher0815
Haubentaucher0815 16.02.2006 um 16:06:46 Uhr
Goto Top
... hab ich auch schon dran gedacht ...
finde ich aber nicht so nett, weil die Struktur noch undeutlicher wird.

Batch1 -> EXE -> Batch2

Nett wäre soetwas wie Rückgabewert des EXE Aufrufs verwenden zu können ... wie in normalen Funtionsaufrufen ...
Mitglied: Biber
Biber 16.02.2006 um 16:24:36 Uhr
Goto Top
Moin Taubenhaucher,
lass doch dein C-Proggi den Output ganz normal auf STDOUT schreiben (auf den Monitor ausgeben). Also mit printf() oder cout.

Etwas ähnliches mache ich mit VB-Schnipseln, die ich aus dem Batch erzeuge und aufrufe in dem Beitrag <a href= target="blank">Datums- und Zeitvariablen...</a>.

Ist doch einfacher, als die Umgebungsvariablen mit SetEnv() zu manipulieren.

Gruß Biber
Mitglied: Guenni
Guenni 16.02.2006 um 23:03:21 Uhr
Goto Top
@Haubentaucher0815

Hi,

das Hauptprogramm main in C/C++ gibt einen Wert mittels return
an das Betriebsystem zurück.

Quelltext von return.exe:
int main(void){
return 1;
}

Den Wert kannst du ohne weiteres in einer Batch verwenden.
@echo off
return.exe
if %errorlevel%==1 goto erg
goto end
:erg
echo programm hat 1 zurückgegeben
:end

Gruß
Günni
Mitglied: Biber
Biber 16.02.2006 um 23:19:05 Uhr
Goto Top
@günni
Uuups, dann hatte ich die Frage falsch verstanden... ich dachte, es ginge um Text, der zurückgegeben werden sollte.

Bei Errorleveln reicht natürlich ein return- oder exit()-Value.

Melde mich wieder, wenn ich ausgeschlafen habe... face-wink

Gute Nacht
Biber
Mitglied: Guenni
Guenni 17.02.2006 um 00:03:25 Uhr
Goto Top
@Biber

Hi,

ebenfalls "Uuups", habe mir die Frage gerade nochmal durchgelesen, das könnte natürlich
auch gemeint sein.

Aber selbst wenn dem so sein sollte, das Hauptprogramm main gibt
sowieso nur INT-Werte zurück, char main(void) funktioniert nicht.

Also müssen innerhalb des C/C++ Programms Entscheidungen getroffen werden,
das Ergebnis wird mit "return ERGEBNIS" (als int) ans OS zurückgegeben.

Also:

if(blablabla) return 1
if(nicht blablabla) return 2

Und in der Batch:

if %errorlevel%==1 goto ....
usw.

Gruß
Günni
Mitglied: Haubentaucher0815
Haubentaucher0815 17.02.2006, aktualisiert am 30.03.2023 um 01:32:57 Uhr
Goto Top
@günni: es geht bei der Problemstellung um einen String genauer gesagt einen Programmpfad

@Biber:
lass doch dein C-Proggi den Output ganz normal auf STDOUT schreiben (auf den Monitor >ausgeben). Also mit printf() oder cout.
Genau ... eien derartige Lösung habe ich gesucht !!!

Allerdings habe ich da noch ein kleines Problem ...
Versuche es mal anhhand eines VBScriptes zu erklären:

Das VBScript Variablesetzen entnhält nur den Befehl:
echo Variablenwert

Habe aus deinem Skript den code:
for /f %a in (cscript //nologo Variablesetzen.vbs) do @echo Wert der Varibale=%a

im CMD funktioniert das, allerdings nicht in einer Batch ... da bekomme ich einen Syntaxfehler.

Es gibt doch bestimmt auch die Möglich keit ohne "for" und mit set ... habe ien wenig probiert allerdings ohne erfolg ...


Gruß,

Haubentaucher0815
Mitglied: Guenni
Guenni 17.02.2006, aktualisiert am 30.03.2023 um 01:33:16 Uhr
Goto Top
@Haubentaucher0815

Hi,

wenn du das Ergebnis eines C/C++ Programms in eine Textdatei speichern kannst,
dann kannst du auch eine Batchdatei erstellen. Diese Batchdatei rufst du von einer
Batchdatei aus auf:

Inhalt der aufrufenden Batchdatei:

cprogramm.exe // --> erstellt Batchdatei
erstellte_Batchdatei // --> die vom cprogramm erstellte Batchdatei wird aufgerufen.

oder

cprogramm.exe // --> erstellt Batchdatei
call erstellte_Batchdatei // --> die vom cprogramm erstellte Batchdatei wird aufgerufen.


Das C-Programm liest deine Log-Files und generiert eine Batchdatei zur
Weiterverarbeitung und speichert diese in erstellte_Batchdatei.

Diese erstellte Batch wird dann ausgeführt.

Hoffe ich mal.....

Gruß
Günni
Mitglied: Biber
Biber 17.02.2006, aktualisiert am 30.03.2023 um 01:33:29 Uhr
Goto Top
@taubenhaucher
Wenn Du am CMD-Prompt eine gültige FOR /F..IN..DO-Anweisung hinbekommen hast, ist das ganze Geheimnis des Laufenlassens als Batchdatei:
Jeweils zwei Prozentzeichen statt einem bei den FOR-Zählvariablen.

Also wenn Du ein C-Proggi hast namens cProg.exe, dass mit Para1=Datum und Para2=Filename gerufen wird und die als Output "Aschermittwoch" zurückgibt:

CMD>FOR /F %i in ('cProg.exe 17.02.2006 x:\yz\mylogdatei.log') do @echo %i  

--->sollte zurückkommen:
Aschermittwoch

BATCH>FOR /F %%i in ('cProg.exe 17.02.2006 x:\yz\mylogdatei.log') do Set "BackFromC=%%i"  

---> Variable %BackFromC% sollte jetzt den Wert "Aschermittwoch" haben.

HTH and nice Weekend
Biber
P.S.
@günni
Mit Dir wollte ich das ohnehin mal bei einem oder zwei Becks weiterdiskutieren face-wink
Mitglied: Guenni
Guenni 17.02.2006 um 18:44:19 Uhr
Goto Top
@Biber

@günni
Mit Dir wollte ich das ohnehin mal bei einem
oder zwei Becks weiterdiskutieren face-wink

von mir aus, jederzeit gerne, aber wo???

Gruß
Günni

P.S.: Nochmal "UUUUPS", ich glaube, das hat jetzt hier nichts mehr verloren. Bitte
verschieben in "OFF TOPIC"
Mitglied: Haubentaucher0815
Haubentaucher0815 20.02.2006 um 10:42:31 Uhr
Goto Top
Vielen Dank für Eure Hilfe !

So funktioniert es ... %% war mein Problem ... hatte halt bislang nur wenig Berührungspunkte mit Batchprogrammierung ...

Gruß,

Haubentaucher
Mitglied: Biber
Biber 20.02.2006, aktualisiert am 30.03.2023 um 01:33:42 Uhr
Goto Top
... %% war mein Problem..

Zu viele Promille sind für viele das Problem... face-wink

[Edit] Beitrag auf "Gelöst" gesetzt.
[/Edit]