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?
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.
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.
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
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.
Ä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.
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.
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.
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.
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.
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;
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.
276 ms totalt · 4 externa anrop · v20260731065814-full.df76c93f