Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Wert aus C-Programm in Batch verwenden

Frage Entwicklung Batch & Shell

Mitglied: Haubentaucher0815

Haubentaucher0815 (Level 1) - Jetzt verbinden

16.02.2006, aktualisiert 20.02.2006, 6058 Aufrufe, 12 Kommentare

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 ...
Mitglied: fachinformatiker
16.02.2006 um 15:39 Uhr
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.
Bitte warten ..
Mitglied: Haubentaucher0815
16.02.2006 um 16:06 Uhr
... 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 ...
Bitte warten ..
Mitglied: Biber
16.02.2006 um 16:24 Uhr
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=http://www.administrator.de/Workshop_Batch_for_Runaways_Part_III_Datums ... target="blank">Datums- und Zeitvariablen...</a>.

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

Gruß Biber
Bitte warten ..
Mitglied: Guenni
16.02.2006 um 23:03 Uhr
@Haubentaucher0815

Hi,

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

Quelltext von return.exe:
<font class="code">
int main(void){
return 1;
}
</font>

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

Gruß
Günni
Bitte warten ..
Mitglied: Biber
16.02.2006 um 23:19 Uhr
@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...

Gute Nacht
Biber
Bitte warten ..
Mitglied: Guenni
17.02.2006 um 00:03 Uhr
@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
Bitte warten ..
Mitglied: Haubentaucher0815
17.02.2006 um 14:32 Uhr
@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
Bitte warten ..
Mitglied: Guenni
17.02.2006 um 16:46 Uhr
@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:

<font class=?code">
cprogramm.exe --> erstellt Batchdatei
erstellte_Batchdatei
--> die vom cprogramm erstellte Batchdatei wird aufgerufen.
</font>

oder

<font class=?code">
cprogramm.exe --> erstellt Batchdatei
call erstellte_Batchdatei
--> die vom cprogramm erstellte Batchdatei wird aufgerufen.
</font>


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
Bitte warten ..
Mitglied: Biber
17.02.2006 um 17:03 Uhr
@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
Bitte warten ..
Mitglied: Guenni
17.02.2006 um 18:44 Uhr
@Biber

@Günni
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"
Bitte warten ..
Mitglied: Haubentaucher0815
20.02.2006 um 10:42 Uhr
Vielen Dank für Eure Hilfe !

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

Gruß,

Haubentaucher
Bitte warten ..
Mitglied: Biber
20.02.2006 um 11:21 Uhr
>>... %% war mein Problem..

Zu viele Promille sind für viele das Problem...

[Edit] Beitrag auf "Gelöst" gesetzt.
[/Edit]
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch: Variable einen Wert zuweisen (7)

Frage von sascha382 zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...