Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    Hali!

    Tök egyszerű Windows-beli batch programozáshoz kérnék segítséget, itt valaki biztos tudja a választ.
    Az Apache-szolgáltatást szeretném elindítani batch programból, ezzel a paranccsal:
    net start Apache2.2
    Ha admin-jogom van, ez működik is.

    De admin-jogok nélkül indítva a cmd-t nem megy, kiírja, hogy "Access is denied", ez nem is baj, ezt szereteném megfelelően kezelni.
    Egész pontosan így néz ki a válaszüzenet:
    System error 5 has occurred.

    Access is denied.

    Na, én azt szeretném elérni, hogy ha ezt írja ki, akkor annak megfelelő válaszüzenetet is írjon ki az adott felhasználónak, pl.: "Nincs admin-jogod.", vagy hasonló.
    A sima 'find' paranccsal próbálkoztam, de nem működött úgy, ahogy szerettem volna. Valószínű, hogy az "Access is denied" sztring némi késleltetéssel érkezik, nem rögtön, vagy a franc tudja, de mindenesetre a find nem találja meg a sztringet még akkor sem, ha pont ez a fenti a kiírt üzenet.

    Így próbálkoztam:

    @echo off
    set keresendo=Access is denied
    echo Ezt keressuk: "%keresendo%"
    rem set errorlevel =
    net start Apache2.2 | find /i "%keresendo%" > nul

    echo hibaszint: "%ERRORLEVEL%"
    if %ERRORLEVEL% EQU 0 goto megtalalta
    if %ERRORLEVEL% EQU 1 goto nincs_ilyen
    if %ERRORLEVEL% EQU 2 goto para

    :megtalalta
    echo OK, megtalaltam
    echo Nincs jogod elinditani a szolgaltatast.
    goto end

    :nincs_ilyen
    echo Nincs meg a keresett sztring.
    echo Elvileg nincs jogosultsaghoz kotheto problema.
    goto end

    :para
    echo Valami nem OK...
    goto end

    :end
    echo -- VEGE --
    pause

    Tehát itt admin-jogok nélkül elindítva a cmd-t azt kéne kiírnia, hogy "Nincs jogod elinditani a szolgaltatast.".
    A find ilyenkor beállít egy errorlevelt, és amennyiben nem talált semmit, 1-esre állítja a hibaszintet, különben pedig 0-ra, ha megtalálta a keresett sztringet.
    (A set errorlevel = sort csak kipróbáltam, mert olvastam már olyan hibáról valahol, aminek ez volt a megoldása, de mivel kommentezve van, ez most mellékes.)

    Ez a kód működik sima azonnali kiíratásnál, mert kipróbáltam ugyanezt egy másik saját batch-programban keresgélve a fentihez hasonló módon. A másik batch-programnak csak annyi a dolga, hogy kiírja a fenti "Access is denied" részt is tartalmazó sorokat, így:
    @echo off
    echo.
    echo System error 5 has occurred.
    echo.
    echo Access is denied. blabla
    echo.

    Na, ezt elmentettem "accesskiir.bat" néven, és kipróbáltam ezt az előző find parancsot, és ez jól MŰKÖDÖTT:

    accesskiir.bat | find /i "%keresendo%" > nul

    A 0-s hibaszintet állította be, helyesen, tehát megtalálta, amit kerestem.
    Ha az "Access" szócskát mondjuk kivettem a fentiből, akkor már az 1-es hibaszintet állította be, tehát nem találta meg. Épp ez lenne az elvárt működés.

    Miért nem működik ugyanez a korábbira, ha esetleg némileg késleltetve van a keresett sztring, mint a szolgáltatás elindításánál?
    Hogyan kellene megoldani?

    Köszi szépen! :R

Új hozzászólás Aktív témák