C:\WINDOWS>HELP SET
Viser, definerer eller fjerner miljøvariable.
SET
[variabel=
[streng
]]variabel Angiver navnet på en miljøvariabel.
streng Angiver en række tegn, som skal knyttes til
variablen.
Skriv SET uden parametre for at vise de aktuelle miljøvariable.
Hvis kommandoudvidelserne er aktiveret, ændres SET på følgende
måde:
Kommandoen SET vil, hvis den startes med et variabelnavn uden
lighedstegn eller værdi, vise værdien af alle variabler, hvis
præfiks
svarer til navnet, som kommandoen SET fik angivet. Eksempelvis
vil:
SET P
vise alle variabler, der begynder med bogstavet 'P'
Kommandoen SET indstiller ERRORLEVEL til 1, hvis variabelnavnet
ikke
findes i det aktuelle miljø.
Kommandoen SET tillader ikke, at et lighedstegn er en del af
navnet på
en variabel.
To nye parametre er føjet til kommandoen SET:
SET /A udtryk
SET /P variabel=
[promptstreng
]Parameteren /A angiver, at strengen til højre for lighedstegnet
er et numerisk udtryk, som evalueres. Funktionen til evaluering
af
udtryk er temmelig enkel og understøtter følgende funktioner i
faldende
prioritetsrækkefølge:
() - gruppering
! ~ - - monadiske operatorer
* / % - aritmetiske operatorer
+ - - aritmetiske operatorer
<< >> - logisk skift
& - bitvis og
^ - bitvis eksklusiv eller
| - bitvis eller
= *= /= %= += -= - tildeling
&= ^= |= <<= >>=
, - udtryksseparator
Hvis du anvender nogle af de logiske operatorer eller
modulusoperatorerne,
skal strengen med udtrykket angives i anførselstegn. Alle ikke-
numeriske
strenge i udtrykket behandles som miljøvariabelnavne, hvis
værdier
konverteres til tal, før de anvendes. Hvis et miljøvariabelnavn
angives uden at være defineret i det aktuelle miljø, anvendes
værdien
nul. Dette giver dig mulighed for at udføre aritmetiske
beregninger med
miljøvariabelværdier uden at skulle skrive de mange %-tegn for at
få
deres værdier. Hvis SET /A udføres fra kommandolinjen uden for et
kommandoscript, viser det udtrykkets endelige værdi.
Tildelingsoperatoren
kræver et miljøvariabelnavn til venstre for tildelingsoperatoren.
Numeriske værdier er decimaltal, medmindre præfikset 0x for
hexadecimale
tal eller 0 for oktale tal er angivet. Således bliver 0x12 lig
med 18, som
er lig med 022. Bemærk, at oktal notation kan være forvirrende.
08 og 09 er
ikke gyldige tal, fordi 8 og 9 ikke er gyldige oktale cifre.
Parameteren /P giver dig mulighed for at indstille værdien af en
variabel
til en linje med input angivet af brugeren. Viser den angivne
promptstreng,
før inputlinjen læses. Promptstreng kan være tom.
Erstatningen af miljøvariabler udvides på følgende måde:
%PATH:str1=str2%
udvider miljøvariablen PATH og erstatter enhver forekomst af
"str1" i det
udvidede resultat med "str2". "str2" kan være den tomme streng,
hvilket
sletter alle forekomster af "str1" fra det udvidede output.
"str1" kan
begynde med en stjerne og svarer i det tilfælde til alt fra
begyndelsen
af det udvidede output til den første forekomst af den resterende
del af
str1.
Det kan også angive understrenge til en udvidelse.
%PATH:~10,5%
udvider miljøvariablen PATH, og bruger derefter kun de 5 tegn,
der begynder
ved det 11. tegn (forskyd 10) i det udvidede resultat. Hvis
længden ikke
er angivet, vil standarden være resten af variabelværdien. Hvis
et af
tallene (forskyd eller forlæng) er negativt, vil det tal, der
anvendes,
være længden af miljøvariabelværdien føjet til den angivne
forskydning
eller forlængelse.
%PATH:~-10%
udtrækker de sidste 10 tegn i variablen PATH.
%PATH:~0,-2%
udtrækker alle undtagen de to sidste tegn i variablen PATH.
Endelig er der tilføjet støtte for forsinket udvidelse af
miljøvariabler.
Denne støtte er som standard altid deaktiveret, men kan
aktiveres/deaktiveres
vha. CMD.EXE-kommandolinjeparameteren /V. Se CMD /?
Forsinket udvidelse af miljøvariabler er nyttig for at undgå
begrænsningerne
i den aktuelle udvidelse, som forekommer, når en tekstlinje
læses, ikke når
den udføres. Følgende eksempel illustrerer problemet med
midlertidig
variabeludvidelse:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "%VAR%" == "after" @echo Det virker, hvis du kan læse
dette
)
Ovenstående virker dog ikke, fordi %VAR% i begge IF-sætninger
erstattes,
når den første IF-sætning læses, da den logisk inkluderer
indholdet af IF,
der er en sammensat sætning. Så et IF i en sammensat sætning
sammenligner
i virkeligheden "before" med "after", som aldrig kan være ens. På
samme
måde vil eksemplet i det følgende ikke virke som forventet:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
fordi der IKKE vil bliver oprettet en liste over filer i den
aktuelle mappe,
i stedet indstilles variablen LIST til den sidst fundne fil. Igen
skyldes
dette, at %LIST% udvides én gang, når FOR-sætningen læses, og på
dette
tidspunkt er variablen LIST tom.
Den faktiske FOR-løkke, der udføres, er således:
for %i in (*) do set LIST= %i
der bliver ved med at indstille LIST til den sidst fundne fil.
Med forsinket udvidelse af miljøvariablen får du mulighed for at
bruge
et andet tegn (udråbstegn) til at udvide miljøvariablerne på
udførelsestidspunktet. Hvis forsinket udvidelse af variablen er
aktiveret,
skal eksemplerne ovenfor skrives på følgende måde for at fungere
efter
hensigten:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo Det virker, hvis du kan læse
dette
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
Hvis kommandoudvidelserne er aktiveret, er der flere dynamiske
miljøvariabler, der kan udvides, men de vises ikke på listen med
variabler, der vises med SET. Disse variabelværdier beregnes
dynamisk,
hver gang værdien af variablen udvides. Hvis brugeren eksplicit
definerer variablen med et af disse navne, tilsidesætter denne
definition den dynamiske definition, som beskrives nedenfor:
%CD% - udvides til den aktuelle mappestreng.
%DATE% - udvider den aktuelle dato vha. det samme format
som
kommandoen DATE.
%TIME% - udvider det aktuelle klokkeslæt vha. det samme
format
som kommandoen TIME.
%RANDOM% - udvider et vilkårligt decimaltal mellem 0 og
32767.
%ERRORLEVEL% - udvider den aktuelle værdi af ERRORLEVEL
%CMDEXTVERSION% - udvider det aktuelle versionsnummer for
udvidelser til kommandofortolker.
%CMDCMDLINE% - udvider den oprindelige kommandolinje, der
startede
kommandofortolkeren.
C:\WINDOWS>HELP SETLOCAL
Begynder at gøre miljøændringer lokale i en batchfil.
Miljøændringer
foretaget efter udstedelsen af SETLOCAL er lokale for batchfilen.
ENDLOCAL skal udstedes for at gendanne de tidligere
indstillinger.
Når slutningen af et batchscript er nået, udføres en implicit
ENDLOCAL
for enhver udestående SETLOCAL-kommando, der er udstedt af det
pågældende batchscript.
SETLOCAL
Hvis kommandoudvidelserne er aktiveret, ændres SETLOCAL på
følgende måde:
Batchkommandoen SETLOCAL accepterer nu valgfrie argumenter:
ENABLEEXTENSIONS / DISABLEEXTENSIONS
aktiverer eller deaktiverer udvidelser af
kommandofortolkeren. Skriv CMD /? for at få
yderligere
oplysninger.
ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
aktiverer eller deaktiverer udvidelse af forsinkede
miljøvariabler. Skriv SET /? for at få yderligere
oplysninger.
Disse modifikatorer varer indtil den tilsvarende ENDLOCAL-
kommando,
uanset deres indstilling før SETLOCAL-kommandoen.
Kommandoen SETLOCAL indstiller værdien af ERRORLEVEL, hvis den
får
et argument. Den vil være nul, hvis et af de to gyldige
argumenter
er angivet, og ellers et. Du kan bruge disse batchscripts til at
bestemme, om udvidelserne er tilgængelige, vha. følgende teknik:
VERIFY OTHER 2>null
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo Udvidelserne kan ikke aktiveres
Dette fungerer, fordi på ældre versioner af CMD.EXE indstiller
SETLOCAL
IKKE værdien ERRORLEVEL. Med et forkert argument initialiserer
kommandoen
VERIFY ikke værdien af ERRORLEVEL til en anden værdi end nul.
C:\WINDOWS>HELP SHIFT
Ændrer placeringen af parametre til en batchfil.
SHIFT
Hvis kommandoudvidelserne er aktiveret, understøtter kommandoen
SHIFT
parameteren /n, der fortæller kommandoen, at den skal starte
forskydningen
ved det n'te argument, hvor n kan være mellem nul og otte.
Eksempelvis vil:
SHIFT /2
forskyde %3 til %2, %4 til %3, osv. og lade %0 og %1 være
uændret.