PeddaMedlem sedan juni 20004 880 inlägg
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
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
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
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
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
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
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
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
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
Ä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
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
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
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
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
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
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
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.