in bat Skript Variable mit Rückgabewerten speißen
lima-city → Forum → Heim-PC → Betriebssysteme
adresse
anwendung
beendigung
befehl
beschrieben programm
code
datei
entsprechenden rechners
freigabe
konsole
memory
problem
programm
routine
set
share
shell
string
test
zeichen
-
Hallo Leute,
ich habe ein Pogramm test.exe welches mir entweder true oder false zurückgibt, aber ich würde gerne wenn der Rückgabewert true ist ein Netzlaufwerk verbinden. Ha irgendjemand von euch ein ahnung wie das gehen soll? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hm, also der Shell kann dein Prog nur einen Integer zurückgeben und keinen Boolean. Ich nehme also an, dass es 0 oder 1 zurückgibt.
test.exe if errorlevel 1 (net use L: \\server\share)
-
nein dieses Programm gibt wie ich es schon geschreiben habe TRUE oder FALSE zurück und dies so wie ich es hier hingeschreiben habe. leider nicht als Zahl
-
Falls wir von einem w32-Executable sprechen, dann: "OMG!"
Schau dir bitte mal die windef.h an:
#ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif
Ein Programm, das direkt in Windows läuft und nicht in einer Runtime (wie Java oder .net), kann nur einen Integer zurückgeben, weil sich andere Dinge (wie zum Beispiel, TRUE, Gurken oder Afghanen) schlecht auf den Stack pushen lassen.
Beitrag zuletzt geändert: 14.8.2009 13:34:52 von census -
speckuntu schrieb:
das weiß ich schon aber das Problem ist das autor des Programmes den string "FALSE" bzw. "TRUE" zurückgibt was mir die errorlevel variante leider nicht zuläss.
Also gibt es doch nicht TRUE oder FALSE zurück, sondern einen String. . .
Was nicht möglich ist. Die Main-Routine (oder WinMain) ist entweder void oder int, sonst nichts. Selbst wenn du versuchen würdest dort einen String zurückzugeben, würdest du schlicht und ergreifend die Adresse des ersten Zeichens zurückgeben. Aber diese liegt nach Beendigung der Anwendung mitten im Invalid-Memory-Land.
Wie willst du denn einen String über den Stack ans OS zurückgeben? Zeichen für Zeichen pushen? Woher soll das OS wissen, dass es n Zeichen poppen muss?
Hier ist das ganze schon einmal diskutiert worden:
http://www.daniweb.com/forums/thread83820.html
==== EDIT =============================================
Gerade noch ein Gedanke:
Meinst du vielleicht, dass das Programm "TRUE" oder "FALSE" auf der Konsole ausgibt und nicht zurückgibt?
Beitrag zuletzt geändert: 14.8.2009 19:43:55 von census -
Schreib das True oder False in ne temporäre Datei und werte diese aus mit dem Netzwerklaufwerkverbindungsscript.
Oder erledige das direkt mit deinem Befehl mit dem du die Verfügbarkeit des entsprechenden Rechners testest...ich mach das mit:
und pingresult.tmp werte ich dann mit meinem Script aus und lösche die Datei anschließend.ping -n 1 <ip> >> C:\pingresult.tmp
Beitrag zuletzt geändert: 14.8.2009 20:04:30 von fatfox -
@census ja das programm gibt das in der Konsole aus.
An die variante mit dem tempfile hab ich auch schon gedacht, aber ich weiß nicht wie ich den inhalt der datei dann in eine variable schreibe. Aber ich habe ein Skript indem die IP aus IPconfig gerausgefiltert wird nur mein problem ist das ich das Skript nicht ganz verstehe:
echo off for /f "tokens=*" %%i in ('ipconfig') do call :ip %%i goto gefunden :ip set TEST=%* echo %TEST% | findstr "IPv4-Adresse" if "%errorlevel%" == "0" ( set IP=%TEST:~36% ) goto :EOF :gefunden echo Die IP-Adresse ist %IP% pause
-
fatfox schrieb:
Schreib das True oder False in ne temporäre Datei und werte diese aus mit dem Netzwerklaufwerkverbindungsscript.
Oder erledige das direkt mit deinem Befehl mit dem du die Verfügbarkeit des entsprechenden Rechners testest...ich mach das mit:
und pingresult.tmp werte ich dann mit meinem Script aus und lösche die Datei anschließend.ping -n 1 <ip> >> C:\pingresult.tmp
Bei ping reicht's aus das Errorlevel zu testen (als Argument die Ziel IP übergeben):
@echo off ping -n 1 %1 > nul if %errorlevel% == 0 (echo %1 lebt.) else (echo %1 lebt nicht.)
Oder wenn man ein Netzlaufwerk mounten will, dann:
@echo off ping -n 1 %1 > nul if %errorlevel% == 0 (net use X: \\%1\freigabe)
Wenn das beschrieben Programm ab immer 0 zurückgibt und nur auf der Konsole "true" oder "false" schreibt (was per se schon Schwachsinn ist), dann muss man tatsächlich in eine Datei pipen:
@echo off test.exe > c:\test.txt findstr true c:\text.txt if %errorlevel% == 0 (netzlaufwerkverbinden)
====== EDIT ====================================
Blödsinn von mir, mit einem Tee funktioniert's auch ohne Datei:
[/code]test.exe | findstr true if %errorlevel% == 0 (netzlaufwerkverbinden)
Beitrag zuletzt geändert: 16.8.2009 22:42:44 von census -
naja ich habe es anders gelöst -> das programm so abändern lassen das ich es mit errorlevel abfragen kann.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage