Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Návrat hodnoty z programu (Visual Basic)

Dobrý den
Občas si ve Visual Basic (2010 Express) píšu pro vlastní potřebu nějaké jednoduché jednoúčelové aplikace (Console Application). Potřebuji poradit, jak to udělat, aby mi takovýhle exáč vrátil nějakou hodnotu, kterou bych potom mohl dál jednoduše použít v běžné bat dávce. Něco jako: SET HODNOTA=mojeapp()

Předmět Autor Datum
Melo by stacit nastavit ExitCode: Environment.ExitCode = 8; (8 je priklad) V davce se pak testuje…
Jan Fiala 05.02.2016 12:13
Jan Fiala
Jak nastavit proměnné prostředí: http://stackoverflow.com/questions/18624213/settin g-an-environmen…
touchwood 05.02.2016 12:18
touchwood
Díky za odpovědi. Zkusil jsem si obojí. Environment.ExitCode funguje dobře. Bohužel prosté Integer…
TarasBulba 08.02.2016 11:36
TarasBulba
Aplikace nemoze vracat string. Zabudni na to.
MM.. 08.02.2016 11:49
MM..
String vypis na standardny vystup, a ked niekto spusti aplikaciu tak si ju spusti ako aplikacia >sub…
MM.. 08.02.2016 11:50
MM..
Nakonec to teda asi obejdu "pěšky". V tom prográmku si vytvořím baťák s potřebným příkazem SET (set…
TarasBulba 08.02.2016 12:21
TarasBulba
Skus pripadne este toto https://msdn.microsoft.com/en-us/library/96xafkes. aspx aj s tym targetom (c…
MM.. 08.02.2016 11:53
MM..
Jo. Ten target tam mám. Musí být EnvironmentVariableTarget.User nebo Machine. Jinak to provádí jen v…
TarasBulba 08.02.2016 12:00
TarasBulba
Reťazec (jednoriadkový) môžeš prečítať zo štandardného výstupu napr. takto: for /f %%i in ('aplikac…
los 08.02.2016 19:13
los
for /f %%i in ('aplikacia.exe') do set premenna=%%i znamenám si, to se může hodit. poslední
lední brtník 08.02.2016 22:22
lední brtník

Díky za odpovědi. Zkusil jsem si obojí.

Environment.ExitCode funguje dobře. Bohužel prosté Integer číslo mi nestačí, já potřebuju předávat String.

Co se týče druhé možnosti - pomocí Environment.SetEnvironmentVariable, tak to samozřejmě funguje taky, dokonce pro String, JENŽE s jedním zádrhelem. Ta změna hodnoty v proměnné se projeví až po ukončení a spuštění další instance CMD. Není tedy k dispozici hned v dalším příkazu běžící dávky jako při použití příkazu SET. A to je dost velký problém. Strejda Google toho sice ohledně "refresh environment variables" nabídne dost, ale na fungující, použitelné řešení jsem nenarazil.

Nakonec to teda asi obejdu "pěšky". V tom prográmku si vytvořím baťák s potřebným příkazem SET (set promenna=hodnota), následně tu dávku zavolám a budu pokračovat. Další možnost by byla povést třeba přes plánovač prvně to nastavení a za chvilku zavolat jako druhou úlohu zbytek dávky, který už by se k té změněné hodnotě proměnné prostředí asi dostal. Jen jsem si myslel, že by to šlo udělat nějak jednodušeji, elegantněji.

Reťazec (jednoriadkový) môžeš prečítať zo štandardného výstupu napr. takto:

for /f %%i in ('aplikacia.exe') do set premenna=%%i
echo %premenna%

Alebo použi dočasný súbor (rozparsovať ho môžeš tiež cez for cyklus). Prenášať si to v premenných prostredia smerom z volaného programu do volajúceho je hlúposť.

Zpět do poradny Odpovědět na původní otázku Nahoru