2012-05-11 3 views
304

배치 파일에서 변수를 선언하고 사용하려고합니다. 그것은 단순해야하는 것처럼 보입니다.Windows 배치 파일 (.BAT)에서 변수 선언 및 사용

@ECHO OFF 

SET location = "bob" 
ECHO We're working with "%location%" 

내가 얻을 출력은 다음과 같습니다

We're working with "" 

여기 무슨 일이야? 변수가 echo되지 않는 이유는 무엇입니까?

답변

398

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

+0

감사 브라이언. 문제 해결됨. –

+5

'='앞의 공백이 이름의 일부로 해석된다면 변수 *는'% location %'로 참조 될 수 없으며'% location %'로 참조되어야합니다. 그건 오타예요? –

+6

@Miserable Variable : 당신 말이 맞아요. 원래의 답변이 잘못된 편집에 희생 된 것 같습니다. –

188

공백이 중요합니다. 값이 ' "bob"''location '이라는 변수를 만들었습니다. 당신이 당신의 가치에 따옴표, 다음 코드는 당신이 따옴표를하지 않으려면, 다음 코드는 아직

set location=bob 

또는 더 나은

과 같아야합니다

set location="bob" 

과 같아야합니다

set "location=bob" 

마지막 구문을 사용하면 부주의 한 공백이 값에서 벗어나는 것을 방지 할 수 있으며, t 특수 문자 (예 : &) | 등

+2

마지막 구문의 단점이 있습니까? – Wolf

+1

@Wolf - 아니요, 단점은 없습니다. 그러나 가장 효과적인시기에는 제한이 있습니다. 값에 따옴표가 포함되어 있지 않으면 이스케이프 걱정없이 값에 거의 모든 문자가 나타날 수 있습니다. 지연 확장이 사용 가능하다면 예외는'%'이고 가능하다면'!'입니다. 그러나 값에 따옴표가 포함되어 있으면'|','&'등의 독점 문자를 벗어날 때 걱정해야합니다. – dbenham

+1

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

4

입력 location.bat

@echo off 
cls 

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

We're working with bob 

는 (실수 U 완료 : space" ") 출력