Een variabele definiëren en gebruiken in een batchbestand

Ik probeer een variabele in een batchbestand te definiëren en te gebruiken. Het lijkt erop dat het eenvoudig moet zijn:

@echo off
set location = "bob"
echo We're working with "%location%"

De output die ik krijg is de volgende:

We're working with ""

Wat is hier aan de hand? Waarom wordt mijn variabele niet geëchod?


Antwoord 1, autoriteit 100%

De spatie voor de = wordt geïnterpreteerd als onderdeel van de naam, en de spatie erna (evenals de aanhalingstekens) worden geïnterpreteerd als onderdeel van de waarde. Dus naar de variabele die je hebt gemaakt kan worden verwezen met %location %. Als dat niet is wat je wilt, verwijder dan de extra spatie(s) in de definitie.


Antwoord 2, autoriteit 46%

De spaties zijn aanzienlijk. Je hebt een variabele gemaakt met de naam 'location '
met een waarde van
' "bob"'. Opmerking – er zijn enkele aanhalingstekens toegevoegd om de locatie van de spatie aan te geven.

Als u aanhalingstekens in uw waarde wilt, moet uw code er als volgt uitzien

set location="bob"

Als u geen aanhalingstekens wilt, moet uw code er als volgt uitzien

set location=bob

Of beter nog

set "location=bob"

De laatste syntaxis voorkomt dat onbedoelde volgspaties in de waarde komen en beschermt ook tegen speciale tekens zoals & | enz.


Antwoord 3

invoer location.bat

@echo off
cls
set /p "location"="bob"
echo We're working with %location%
pause

uitvoer

We're working with bob

(fouten die je hebt gemaakt: space en " ")


Antwoord 4

Overweeg ook om SETX te gebruiken – het zal de variabele instellen op gebruiker of machine (beschikbaar voor alle gebruikers) niveau hoewel de variabele bruikbaar zal zijn met de volgende opening van cmd.exe , zo vaak kan het samen met SET worden gebruikt:

::setting variable for the current user
if not defined My_Var (
  set "My_Var=My_Value"
  setx My_Var My_Value
)
::setting machine defined variable
if not defined Global_Var (
  set "Global_Var=Global_Value"
  SetX Global_Var Global_Value /m
)

U kunt de registerwaarden ook rechtstreeks bewerken:

Gebruikersvariabelen: HKEY_CURRENT_USER\Environment

Systeemvariabelen: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Hiermee kunnen enkele beperkingen van SET en SETX worden vermeden, zoals de variabelen die = in hun naam bevatten.

Bewerken door derden

SETX.exe
Omgevingsvariabelen permanent instellen,

SETX kan worden gebruikt om omgevingsvariabelen in te stellen voor de machine (HKLM) of de momenteel aangemelde gebruiker (HKCU):

Optie /m

 /m
       Set the variable in the system environment HKLM.
       (The default is the local environment HKCU)

Nog een voorbeeld

::setting variable for the current user
if not defined JAVAJDK (
  set "JAVAJDK=C:\Program Files\Java\jdk-13\bin"
  setx JAVAJDK "C:\Program Files\Java\jdk-13\bin"
)

In een command.exe kun je de variabele als deze gebruiken cd %JAVAJDK%.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

sixteen − ten =

Other episodes