2012-02-22 2 views
7

는이 같은 배치 문자열을 만들기 위해 노력하고 있어요 : > abcd_배치 문자열 병합

내가 ABCD와 같은 값을 soeid이라는 변수를 가지고있다. 그래서 이것은 내가하고있는 일이지만 작동하지 않습니다.

set soeid=abcd 

set "val1=>" 
set "val2=_" 
set "str=%val1%%soeid%%val2%" 

echo %str% 
+5

"작동하지 않는"뒤에 입력해야하는 첫 번째 것은 * 작동 방법에 대한 설명입니다. 우리는 당신의 마음을 읽거나 여기에서 당신의 스크린을 볼 수 없습니다; 우리가 계속해야하는 모든 것은 당신이 당신의 질문에 우리에게 말한 것입니다. 도움이 필요하면 문제가 무엇인지 알려 주시고, 시도한 것이 어떻게 작동하지 않았는지 알려주십시오. –

답변

11

나는 정상적으로 작동한다고 확신한다. 이를 증명하려면 값을 정의한 후에 SET STR을 추가하면 올바른 값이 표시됩니다.

발생하는 문제는 값을 반향하려고 할 때 실행중인 줄이 echo >abcd_이됩니다. > 인용 또는 탈출, 그래서 당신은 다음, 따옴표를보고 마음 echo "%str%"에 라인을 변경하지 않는 경우 단순히 인수없이 ECHO의 OUPUT을 복용하고

"abcd_"라는 이름의 파일로 리디렉션되지 않는다 그것은 효과가있을 것이다.

다른 옵션은 지연 확장을 활성화하고 사용하는 것입니다 (나는이 배치 스크립트 코드 가정 및 명령 줄에서 실행하고 있지 않다) 인터프리터 동안 초기에

setlocal enableDelayedExpansion 
set soeid=abcd 

set "val1=>" 
set "val2=_" 
set "str=%val1%%soeid%%val2%" 

echo !str! 

정상 %var% 확장이 발생 선을 구문 분석하고 있습니다. Delayed !var! 확장은 실행 직전에 발생합니다. 리디렉션은 중간 어딘가에서 감지됩니다. 이것이 정상 확장이 작동하지 않는 이유입니다. 해석기는 확장 된 > 문자를보고이를 출력 리디렉션 연산자로 해석합니다. 지연된 확장은 리디렉션이 파싱 될 때까지 > 문자를 인터프리터에서 숨 깁니다.

지연된 확장에 대한 자세한 내용은 명령 줄에서 SET /?을 입력하고 "마지막으로 지연된 환경 변수 확장 지원 ..."으로 시작하는 단락부터 읽으십시오.

+0

고마워 지금은 잘 작동했습니다. 문제는! str 대신에 echo % str %를 사용했다는 것입니다. 두 사람의 차이점을 설명해 주시겠습니까? – NewQueries

+0

@ NewQueries- 설명에 대한 답변을 연장했습니다. – dbenham