2012-05-11 29 views

Odpowiedz

398

Przestrzeń przed = jest interpretowana jako część nazwy, a spacja po niej (jak również znaki cudzysłowu) są interpretowane jako część wartości. Tak utworzoną zmienną można znaleźć pod adresem %location %. Jeśli nie tego chcesz, usuń dodatkowe spacje w definicji.

+0

Dzięki Brian. Problem rozwiązany. –

+5

Jeśli spacja przed '=' jest interpretowana jako część nazwy, wtedy zmiennej * nie można * odwoływać się jako '% location%', musi być ona określana jako '% location%'. Czy to literówka? –

+6

@Miserable Variable: Masz rację; wygląda na to, że oryginalna odpowiedź padła ofiarą nieprawidłowej edycji. –

188

Przestrzenie są znaczące. Utworzono zmienną o nazwie 'location ' o wartości ' "bob"'.

Jeśli chcesz cytuje w swojej wartości, a następnie Twój kod powinien wyglądać

set location="bob" 

Jeśli nie chcesz, cytaty, a następnie kod powinien wyglądać

set location=bob 

albo jeszcze lepiej

set "location=bob" 

Ostatnia składnia zapobiega nieumyślnemu dostępowi do wartości, a także chroni przed błędami t znaki specjalne, takie jak & | itp

+2

Czy są jakieś minusy dla ostatniej składni? – Wolf

+1

@Wolf - Nie, nie ma minusów. Istnieje jednak granica, kiedy jest najbardziej efektywna. Dopóki wartość nie zawiera cudzysłowów, wtedy prawie dowolne znaki mogą pojawić się w wartości bez martwienia się o ucieczkę. Wyjątkami są '%' i być może '!' Jeśli włączone jest opóźnione rozwijanie. Ale jeśli wartość zawiera cytaty, to musisz martwić się, kiedy uciec trującym znakom, takim jak '|,' & ', itp. – dbenham

+1

wydaje się to być takie samo jak ustawienie zmiennej środowiskowej w oknach. Czy jest to jedyny sposób użycia zmiennych lokalnych w skryptach wsadowych? – parasrish

4

wejście location.bat

@echo off 
cls 

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

wyjście

We're working with bob 

(błędy u zrobione: space i " ")

Powiązane problemy