Változóra változóval hivatkozás BATCH fájlban

Változóra változóval hivatkozás BATCH fájlban
2012-10-18T10:23:03+02:00
2012-10-23T18:31:03+02:00
2022-11-27T04:45:34+01:00
Menyus78
Sziasztok!

Írogatok egy batch fájlt, ami VBScript fájlokat hívogat meg megfelelő paraméterekkel. Ehhez csináltam egy kezdetleges menüt, de a célnak - eddig legalábbis - megfelelt:

:menuLOOP cls echo. echo.= %msg_menu_title% ================================================= echo. for /f "tokens=1,2,* delims=_ " %%A in ('"findstr /b /c:":menu_" "%~f0""') do echo. %%B %%C set choice= echo.&set /p choice=%msg_menu_choicemessage%: ||GOTO:EOF echo.&call:menu_%choice% GOTO:menuLOOP ::------------------------------------------------------- :: menu functions follow below here ::------------------------------------------------------- :menu_V %msg_menu_ver% goto ver :menu_1 1-es verziójú adatbázisfissítés goto up_v1 :menu_2 2-es verziójú adatbázisfissítés goto up_v2 :menu_H Súgó goto help :menu_ goto menuLOOP ::------------------------------------------------------- :: menu functions end ::-------------------------------------------------------

A scriptet több nyelvűre kellene megcsinálni, ezért minden kiírandó szöveget változóba rakok. Ez szépen is működik, kivéve a menü résznél. A :menu_V %msg_menu_ver% -nél egyszerűen kiírja a %msg_menu_ver%-t, ahelyett, hogy a hozzá tartozó szöveget írná ki. Szerintetek rá lehet valahogy venni, hogy ne a változó nevét, hanem az értéket írja ki. Vagy batch fájlban ne akarja pointert? Mert más nyelvekben így hívják, ha jól tudom.

Ez az egész egy Access adatbázist frissítene, amit úgy néz ki, VBScript-ből egész jól meg tudok oldani. Ha valakinek van jobb ötlete, akkor ne tartsa magában, ezért raktam be az Access-hez is. De mindenképpen olyan megoldásra van szükségem, amihez nem kell telepíteni semmit. Ezért is gondoltam a VBScript-re.
Mutasd a teljes hozzászólást!
Mondjuk nem lenne egyszerűbb, ha csinálnál a batch-en belül 2 menü részt is, egy magyar és egy olasz, attól függően hogy

start hun

vagy

start ita

indították, az a menü fog elindulni (:menuLOOP_HUN, :menuLOOP_ITA).

Ha paraméter nélkül vagy hibás paraméterrel indították, akkor a help-nél magyarul és olaszul is kiírja a teendőket, aztán gombnyomásra kilép.
Mutasd a teljes hozzászólást!

  • Miért nem használsz vbscript-et vagy powershell-t inkább a menühöz?
    Mutasd a teljes hozzászólást!
  • A VBScripten már gondolkoztam én is. Eredetileg két sorból állt ez a batch fájl: egy, amiben a cscript.exe-vel, NoLogo paraméterrel meghívom a vbscript-et, meg egy pause, hogy el tudjam olvasni, mit írt ki. Aztán kapott egy paraméter feldolgozót, amikor kettőre bővült a vbscriptek száma, majd egyre jobban és jobban bővült. 4-nél menüt kapott, majd több nyelvet. Ha nem sikerül megcsinálni, akkor az olasz kolléga majd lefordítja magának, vagy megtanul magyarul.

    Powershell van Windows XP-n? Ügyfelek gépén kell futtatnom, és nem telepíthetek semmit. Sok esetben jogosultságom sincs. Mindennek pendrive-ról kell futnia, júzer jogokkal.
    Mutasd a teljes hozzászólást!
  • Megoldás lehet, ha mondjuk egy hta (html application) fájlt készítenél, html-ben lenne a menü + hozzá a vbs rész.

    pl:
    Computer Information Tool (HTA)

    (az Internet Explorer-ben szükséges lehet a megfelelő biztonsági beállítások engedélyezésére, módosítására)

    Az egyes nyelvi szövegeket veheted külső fájlból is, vagy tárolhatod a programon belül tömbökben, nyelvenként külön.


    Amúgy az %msg_menu_ver% hol kap értéket?
    Mutasd a teljes hozzászólást!
  • Passzolom, hogy xp-hez van-e powershell, de gondolom, könnyű kideríteni. Sima vbs még lehet attól az indító program.
    Mutasd a teljes hozzászólást!
  • Sajnos ez a HTA-s dolog sem igazán bejövős. Találkoztam olyan géppel, amin még az internet explorer is tiltva volt. A biztonsági beállításokat meg nem szivesen b@*gatnám.

    Amúgy az %msg_menu_ver% hol kap értéket?

    A start.bat fájlban, mégpedig úgy, hogy van egy lang nevű változó, aminek az értéke momentán hun.
    set lang=hun
    Ezután
    if "%lang%" == "hun" goto hun
    if "%lang%" == "ita" goto ita

    A :hun cimke után vannak felsorolva a nyelvi sztringeket tartalmazó változók. A végén pedig van egy goto begin, amivel az érdemi részre ugrok, kihagyva pl az olasz szövegeket. Itt még csinálok egy-két dolgot, pl csak akkor ugrok a menüre, ha paraméter nélkül indították a start.bat-ot. Ha van paraméter, de hibás, akkor a :help cimkére ugrok, stb. Utána jön a beidézett menuLOOP.
    Mutasd a teljes hozzászólást!
  • Mondjuk nem lenne egyszerűbb, ha csinálnál a batch-en belül 2 menü részt is, egy magyar és egy olasz, attól függően hogy

    start hun

    vagy

    start ita

    indították, az a menü fog elindulni (:menuLOOP_HUN, :menuLOOP_ITA).

    Ha paraméter nélkül vagy hibás paraméterrel indították, akkor a help-nél magyarul és olaszul is kiírja a teendőket, aztán gombnyomásra kilép.
    Mutasd a teljes hozzászólást!
  • Köszi szépen! Ez is remek ötlet, egyszerű és frappáns megoldás, egyetlen hátránya, hogy egyel több sebből fog vérezni a scriptem. Épp ezért vagyok bajban, mert jött egy Árnyéktól is, és jött egy tőled is, és fogalmam sincs, melyiket fogadjam el. Még azt sem tudom, hogy melyiket valósítom meg. Valószínűleg Árnyék megoldásába fogok bele, de ha beletörik a bicskám, a tiedet csinálom meg. Ilyenkor mi a teendő. Melyikőtöké a pont?
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd