1.bat call 2.bat - 2.bat palauttaa väärän errorlevelin

Discussion in 'Windows -ongelmat' started by yamaneko, Mar 29, 2007.

  1. yamaneko

    yamaneko Senior member

    Joined:
    Sep 22, 2005
    Messages:
    5,093
    Likes Received:
    1
    Trophy Points:
    118
    Mistähän mahtaa johtua, että bat (komentojono) joka normaalisti palauttaa oikean errorlevelin ajettaessa yksinään, palauttaa aina yhden ja saman errorlevelin (olisiko paluukoodi suomeksi? ;) riippumatta miten oikeasti kävi, kun se ajetaan call -käskyllä toisesta batista? Eikö tuo vain toimi "DOSissa" (Windows XP:n komentokehoite) vai EVO? :)
     
  2. L00P

    L00P Regular member

    Joined:
    Feb 28, 2007
    Messages:
    144
    Likes Received:
    0
    Trophy Points:
    26
    En ole aivan varma, mutta voisiko ongelma johtua call-käskyn palauttamasta arvosta. Eli Call käsky palauttaa onnistuessaan esim."1" epäonnistuessaan "0". Varsinaisesti sen toisen .bat tiedoston errorleveliä siis et toiseen tiedostoon noin saa tuotua.
     
  3. yamaneko

    yamaneko Senior member

    Joined:
    Sep 22, 2005
    Messages:
    5,093
    Likes Received:
    1
    Trophy Points:
    118
    Kirjoitin epäselvästi. Kyse on enemmän siitä mitä ajettava ohjelma (tässä tapauksessa grep) palauttaa 2.batin sisällä. Eli normaalisti ajatettaessa 2.bat itsenäisesti, grep palauttaa ajonsa jälkeen joko 0, 1 tai 2. Käynnistettäessä 2.bat toisesta batista on palautus aina (muistaakseni) 0, riippumatta siitä miten oikeasti kävi.

    Eli tässä tapauksessa 1.batiin ei haluta edes mitään palautuskoodia, kaikki tuo käsitellään 2.batissa.
     
    Last edited: Mar 29, 2007
  4. L00P

    L00P Regular member

    Joined:
    Feb 28, 2007
    Messages:
    144
    Likes Received:
    0
    Trophy Points:
    26
    Taas mutua onpi niin kauan kun noitten kanssa leikki viimeksi eikä silloinkaan tullut kovin suuresti perehdyttyä.

    Mitäs jos kokeilisi lukea sen grep:n palauttaman arvon muuttujaan ja käyttää sitten tätä muuttujassa olevaa arvoa jatkossa?

    set variable=grep....

    Onnistuuko tälläinen?

    Ajattelin, että periaatteessa 1.bat on kokoajan ajossa ja tällöin tuo errorlevel systeemi toimii vain 1.bat:ssa, koska errorlevel on varattu 1.bat:lle.

    EDIT: Harvinaisen selväjärkinen/lukuinen selostus ;)
     
    Last edited: Mar 29, 2007
  5. yamaneko

    yamaneko Senior member

    Joined:
    Sep 22, 2005
    Messages:
    5,093
    Likes Received:
    1
    Trophy Points:
    118
    Näin itse asiassa onkin :)

    Edit: ei, minulla olikin eri tavalla, kokeilen tuolla tavalla mitä vinkiksi annoit

    Edit2: Ei toimi, muuttujaan tulee se komento :)

    Jos noin on, niin siinä se sitten on se syykin. Eli täytyy palata sorvin ääreen ja tehdä jotenkin eri tavalla. Kiitos avusta!
     
    Last edited: Mar 29, 2007
  6. L00P

    L00P Regular member

    Joined:
    Feb 28, 2007
    Messages:
    144
    Likes Received:
    0
    Trophy Points:
    26
    EDIT3:Eihän tämäkään kyllä todellista ongelmaa poista sehän palauttaa ainakin win 2003 server resourcekitillä olevan qgrep-komennon outputin eli lisää miettimistä vielä.

    Outoa, koska peruskomennoilla tuo toimii ainakin ESIM:

    c:\tepm\bat\1.bat
    @ECHO OFF
    set myvar=call c:\temp\2.bat
    %myvar%

    c:\temp\2.bat
    @ECHO OFF
    echo taalla 2.bat:ssa

    ajettaessa 1.bat tulostaa ruudulle:
    taalla 2.bat:ssa

    Onko sulla varmasti komennon polku oikein?

    esim.

    set variable=call c:\temp\grep....

    vai oletko laittanut grep:n polun path:iin?

    EDIT: tosta aiemmasta tosiaan unohtu tuo call tajusin vasta nyt :)

    EDIT2: Ei sitä call-käskyä ainakaan tuossa tarvitse edes käyttää toimii:
    set myvar=c:\temp\2.bat
     
    Last edited: Mar 29, 2007

Share This Page