배치 파일에서 변수 정의 및 사용


450

배치 파일에서 변수를 정의하고 사용하려고합니다. 간단해야합니다.

@echo off

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

내가 얻는 결과는 다음과 같습니다.

We're working with ""

무슨 일이야? 변수가 에코되지 않는 이유는 무엇입니까?

답변:


552

앞의 공백 =은 이름의 일부로 해석되고 그 뒤의 공백과 인용 부호는 값의 일부로 해석됩니다. 따라서 생성 한 변수는로 참조 할 수 있습니다 %location %. 그것이 원하는 것이 아니라면, 정의에서 여분의 공간을 제거하십시오.


7
이전의 공백 =이 이름의 일부로 해석되면 변수 로 참조 할 수 없으며 로 참조 %location%해야합니다 %location %. 오타입니까?
Miserable Variable

7
@Miserable Variable : 맞습니다. 원래 답변이 잘못 편집 된 것으로 보입니다.
Brian Nixon

18
이것은 MS가 함께 제공된 것입니다 그래서
Falaque

5
@Falaque alias x = y* nix 토지 와 는 반대로 ?
기본

1
@Falaque 그래서 bash를 실행할 때 어떻게 할 것이라고 생각 x = y하십니까?
phuclv

263

공간이 중요합니다. 'location ' 값으로 이름이 지정된 변수를 작성했습니다
' "bob"'.참고-작은 따옴표를 묶어 공간의 위치를 ​​표시했습니다.

당신의 가치에 따옴표를 원한다면, 코드는 다음과 같아야합니다

set location="bob"

따옴표를 원하지 않으면 코드는 다음과 같아야합니다.

set location=bob

아니면 더 나은

set "location=bob"

마지막 구문은 부주의 한 후행 공백이 값에 들어가는 것을 방지하고 & |등의 특수 문자로부터 보호합니다 .


8
마지막 구문에 대한 단점이 있습니까?
Wolf

8
@ 울프-아니요, 단점은 없습니다. 그러나 가장 효과적인시기에는 제한이 있습니다. 값에 따옴표가 포함되어 있지 않으면 이스케이프에 대한 걱정없이 거의 모든 문자가 값에 나타날 수 있습니다. 예외는 확장 %가능 !하고 지연 확장이 활성화 된 경우입니다. 값이 따옴표를 포함하지한다면, 당신은 같은 독 자 탈출 할 때 걱정해야한다 |, &
dbenham

1
이것은 Windows에서 환경 변수를 설정하는 것과 같습니다. 이것이 배치 스크립트에서 지역 변수를 사용하는 유일한 방법입니까?
parasrish 2016 년

1
@ 울프, 당신은 명령 확장 이 활성화 되어 있는지 확인해야 하지만, 이것은 어쨌든 기본 구성입니다 ...
aschipfl

7

입력 location.bat

@echo off
cls

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

산출

We're working with bob

(실수 한 실수 : space" ")


4
set /p사용자에게 프롬프트하고 지정된 변수에 답변을 저장합니다. 예 :set /p name="What is your name? " & echo Hello, %name%.
Robert Mooney

6
-1, 구문 set /p "varname"="text"이 잘못되었습니다 location"(후행 인용 부호와 함께) 라는 이름의 변수를 만듭니다 . 이어야합니다 set /p location="bob". 그러나
그때도
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.