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:
Aber das ist irgendwie nicht wirklich schön gelöst ...
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 ...
Please also mark the comments that contributed to the solution of the article
Content-Key: 26182
Url: https://administrator.de/contentid/26182
Printed on: April 24, 2024 at 11:04 o'clock
12 Comments
Latest comment
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
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
@Haubentaucher0815
Hi,
das Hauptprogramm main in C/C++ gibt einen Wert mittels return
an das Betriebsystem zurück.
Quelltext von return.exe:
Den Wert kannst du ohne weiteres in einer Batch verwenden.
Gruß
Günni
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
@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:
Und in der Batch:
usw.
Gruß
Günni
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 ....
Gruß
Günni
@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:
oder
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
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
@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:
--->sollte zurückkommen:
Aschermittwoch
---> 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
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
@Biber
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"
@günni
Mit Dir wollte ich das ohnehin mal bei einem
oder zwei Becks weiterdiskutieren
Mit Dir wollte ich das ohnehin mal bei einem
oder zwei Becks weiterdiskutieren
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"