webForumDet fria alternativet

Sätta en miljövariabel med javascript

16 svar · 766 visningar · startad av Pedda

PeddaMedlem sedan juni 20004 880 inlägg
#1

Har letat lite på nätet men hittar inget om detta.

Är det möjligt att sätta en miljövariabel med javascript?
I så fall, hur?

Eftersom jag har skrivit i javascript forumet så får jag fortsätta här även om nästa fråga inte har något med javascript att göra, men med miljövariabler.

Kan man i en bat-fil kolla om en miljövariabel är satt?

colioneMedlem sedan juni 20013 386 inlägg
#2

För att skapa en i JavaScript:

var WSHShell = new ActiveXObject("WScript.Shell")

WSHShell.Environment.item("MinVar") = "Värde"

För att kolla i en bat:

  @ECHO OFF
:TOP
     IF (%MinVar%)==(foo) GOTO END
     ECHO Värdet är "%MinVar%" 
GOTO TOP
:END

Kom ihåg att variablen måste vara skapad innan du öppnar upp tolken som ska kolla av den.

R. -> Tog bort SHIFT-kommandot i batchen...det var onödigt för det du tänkte göra.

colioneMedlem sedan juni 20013 386 inlägg
#3

Alternativt kan du göra såhär i batchen:

  @ECHO OFF
:TOP
     IF NOT (%MinVar%)==(VÄRDET_SOM_DEN_SKA_HA) GOTO END
     ECHO Värdet är "%MinVar%" 
GOTO TOP
:END
nitro2k01Medlem sedan aug. 20037 630 inlägg
#4

Svaret på fråga 1:
Ja, i Internet Explorer, med säkerhetsinställingarna nerdragna. (Alt. om du kör skriptet separat i Windows) Generellt sett nej. (I andra läsare, samt i IE med standard-säkerhet)

Svaret på fråga 2.

@echo off

if "%path%"=="" goto notset
echo. path is set

goto endset
:notset
echo. path is not set
:endset

pause

if "%blargh%"=="" goto notset
echo. blargh is set

goto endset
:notset
echo. blargh is not set
:endset

pause

Om du förklarar vad du vill åstadkomma kanske jag (eller någon annan) kan komma på en lösning dock.

PeddaMedlem sedan juni 20004 880 inlägg
#5

OK, jag ska förklara vad jag har tänkt mig.

Jag ska ha en bat-fil som kollar om en miljövariabel är satt.

Om den är satt ska inget hända.
Om den inte är satt ska internet explorer öppna en html fil.

nitro2k01Medlem sedan aug. 20037 630 inlägg
#6

Ok, och var kommer det där med att sätta en miljövariabel på sidan från då?

PeddaMedlem sedan juni 20004 880 inlägg
#7

Jag tänkte att när html-filen öppnas så sätts en miljövariabel så kan jag kolla att html-filen inte öppnas igen.
Bat-filen kommer köras som autorun på skivor som html-filerna finns på. Man kommer få byta skivor ibland och då vill jag inte att webbläsaren ska startas varje gång man byter skiva.

colioneMedlem sedan juni 20013 386 inlägg
#8

Då kan du istället anropa JS-filen från batch-filen och låta den sätta variabeln och öppna ie-fönstret...
Något sånt här:

  @ECHO OFF
     IF (%MinVar%)==(VÄRDET_SOM_DEN_SKA_HA) GOTO ISSET
     wscript "c:\sökväg till filen\fil.js"
:ISSET
'GÖR ANNAT

JS-filen:

var WSHShell = new ActiveXObject("WScript.Shell")
WSHShell.Environment.item("MinVar") = "Värde"

var objExplorer = new ActiveXObject("InternetExplorer.Application")
objExplorer.navigate("file://c:\\sökväg till filen\\fil.html");
objExplorer.Visible = 1

Vill du göra fler inställningar i IE-fönstret har du en referens här:
http://www.microsoft.com/technet/scriptcenter/guide/sas_ent_qpyo.mspx?mfr=true

PeddaMedlem sedan juni 20004 880 inlägg
#9

Tror inte att jag kan använda det exemplet.
Problemet blir nog med sökvägen. Jag vet ju inte vad användarens enhet heter t.ex.
Sökvägen kan vara olika.

colioneMedlem sedan juni 20013 386 inlägg
#10

Är det inte du som kopierar över filerna till kundens dator via dvdn då? Eller är det här ett annat projekt?

Man kan ta reda på enhetsbeteckningar och liknande...du har väl nån kontroll på vart filen kan tänkas ligga? Om alla filer ligger i samma mapp/eller del i gemensam struktur är det enklare.

spangoMedlem sedan juni 20006 147 inlägg
#11

Varför gå omvägen via JS?

if "%VARIABELN%"=="": goto notset

REM öppna HTML-fil i defaultwebbläsaren
start filen.html
set VARIABELN=någonting
goto end

:notset
REM --- lägg in kommandon som ska köras om variabeln är satt ---

:end

Fast inget av tillvägagångssätten som presenterats här kommer att funka på det sätt du vill. När man sätter miljövariabler gäller det normalt bara för den process man sätter ifrån, samt subprocesser till den. I Vista finns setx som sätter en miljövariabel persistent, men det är inte heller riktigt vad du vill. Då kommer HTML-filen bara öppnas en enda gång per användare - bootar man om och sätter in skivan på nytt är variabeln fortfarande satt.

Det du egentligen vill göra är att starta ett program vars process lever tills man stänger webbläsaren (egentligen HTML-filen, du kan göra en IE-wrapper för detta). Det första den processen ska göra, dock, är att kolla om det redan finns en process av det programmet, och om så är fallet, starta inte alls.

PeddaMedlem sedan juni 20004 880 inlägg
#12

Det är kunden själv som kopierar.
Mappstrukturen är likadan på alla skivor

t.ex

F:/
start.bat, autorun.inf
DATA/
index.html o.s.v

PeddaMedlem sedan juni 20004 880 inlägg
#13

För min del skulle det egentligen räcka om den kollar om IE är igång.
Om IE inte är igång ska den öppna index.html annars inte göra något.
Kanske är dumt att blanda in miljövariabler.

colioneMedlem sedan juni 20013 386 inlägg
#14

spango, det där stämmer inte...de variabler du sätter med js är persistenta. Till skillnad mot dem du sätter i kommando-tolken. Det är väl största skälet att gå omvägen via JS.

spangoMedlem sedan juni 20006 147 inlägg
#15

colione skrev:

spango, det där stämmer inte...de variabler du sätter med js är persistenta. Till skillnad mot dem du sätter i kommando-tolken. Det är väl största skälet att gå omvägen via JS.

Schooled! Brydde mig inte en om att testa. Kräver dock adminrättigheter att göra, åtminstone på Vista.

colioneMedlem sedan juni 20013 386 inlägg
#16

Jag tror du får mer problem med att kolla av om internet explorer körs. Antingen får du göra det med appactivate och sendkeys, vilket är riksabelt om användaren skulle få för sig att klicka runt...andra alternativet är att köra en WQL fråga mot WIN32_Processes, och då får du ett säkert svar på om den körs, men det är svårt att manipulera den genom att skicka in nya data. (Går nog inte me JS).

Jag tror på din förra linje med miljövariabler, samt även på att använda en tredje sådan. ;) Nämligen: %CD% den innehåller den aktuella sökvägen till den batch-fil du kör.
När vi nu vet det kan vi påbörja våran sökväg med den. Något sånt här, sitter på min mac just nu så det är otestat:

@ECHO OFF

IF (%MinVar%)==(VÄRDET_SOM_DEN_SKA_HA) GOTO ISSET
wscript "%CD%\undermapp\fil.js"
:ISSET
'GÖR ANNAT

I js-filen:

function GetPath ()
{
var path = WScript.ScriptFullName; 
path = path.substr(0,path.lastIndexOf("\\")+1);
return path;
}

var WSHShell = new ActiveXObject("WScript.Shell");
WSHShell.Environment.item("MinVar") = "Värde";

var objExplorer = new ActiveXObject("InternetExplorer.Application");
objExplorer.navigate("file://"+getPath()+"index.html");
objExplorer.Visible = 1;
PeddaMedlem sedan juni 20004 880 inlägg
#17

Jag löste det så här:

När indexfilen öppnas sätts en miljövariabel med värdet "start"
När indexfilen stängs ändras värdet till "stop"

Sen har jag bat-filen

@ECHO OFF
REM kolla miljövariabeln
IF (%DVDLib%)==(start) GOTO END

REM starta ie
START iexplore file://%~dp/index.html

:END

Testade igår med %CD% eftersom jag trodde att den skulle ge sökvägen till batfilen, men det gjorde den inte. Den gav sökvägen till mina dokument.
Testkörning sker under dagen, men det verkar funka.

Genererad på 385 ms · cache AV · v20260730165559-full.f96bc7eb