kostenloser Webspace werbefrei: lima-city


in bat Skript Variable mit Rückgabewerten speißen

lima-cityForumHeim-PCBetriebssysteme

  1. Autor dieses Themas

    speckuntu

    Kostenloser Webspace von speckuntu

    speckuntu hat kostenlosen Webspace.

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c****s

    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)
  4. Autor dieses Themas

    speckuntu

    Kostenloser Webspace von speckuntu

    speckuntu hat kostenlosen Webspace.

    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
  5. c****s

    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
  6. Autor dieses Themas

    speckuntu

    Kostenloser Webspace von speckuntu

    speckuntu hat kostenlosen Webspace.

    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.
  7. c****s

    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
  8. 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:

    ping -n 1 <ip>  >> C:\pingresult.tmp
    und pingresult.tmp werte ich dann mit meinem Script aus und lösche die Datei anschließend.

    Beitrag zuletzt geändert: 14.8.2009 20:04:30 von fatfox
  9. Autor dieses Themas

    speckuntu

    Kostenloser Webspace von speckuntu

    speckuntu hat kostenlosen Webspace.

    @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

  10. c****s

    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:

    ping -n 1 <ip>  >> C:\pingresult.tmp
    und pingresult.tmp werte ich dann mit meinem Script aus und lösche die Datei anschließend.


    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:
    test.exe | findstr true
    if %errorlevel% == 0 (netzlaufwerkverbinden)
    [/code]

    Beitrag zuletzt geändert: 16.8.2009 22:42:44 von census
  11. Autor dieses Themas

    speckuntu

    Kostenloser Webspace von speckuntu

    speckuntu hat kostenlosen Webspace.

    naja ich habe es anders gelöst -> das programm so abändern lassen das ich es mit errorlevel abfragen kann.

  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!