2014-04-17 3 views
1

일괄 처리 스크립트 (재미 용 ...)로 컴파일 할 DSL에서 작업하고 있습니다. 함수 호출을하려고합니다 : DSL은 param1이라는 매개 변수로 함수를 정의합니다. 일괄 처리에서는 param1 = % 1 (으)로 레이블을 정의합니다. DSL은 어떤 값을 가진 호출을 정의합니다. 일괄 처리는 공백 뒤에 값이있는 호출을 정의합니다.일괄 처리에서 이스케이프 함수 매개 변수

값에 공백이 있으면 두 개의 매개 변수로 정의되는 것이 문제입니다. ^로 공백을 벗어날 수 있지만, 큰 따옴표를 벗어나려고하면 엉망이됩니다.

누구나 궁극적 인 배치 매개 변수 이스케이프를 도울 수 있습니까?

BTW, 자사의 MPS 작성하고 당신이 그것을 원하는 경우 여기 : https://github.com/TheAnosmic/MPSBatch

답변

0

나는 명확한 신뢰할 수있는 방법이 없다 생각합니다. 일괄 파서는 정말 못생긴다. 당신이) 닫는의 변수가있는 경우 예를 들어 다음과 같은 에코 휴식 것입니다 : 그것은

@set VAR=a * b "test" c() 
@for /F " delims==" %%V in ("%VAR%") do @echo var=%%V. 

사용하는 데 도움이 어떤 상황에서

set VAR=Program Files (x86) 
echo var=%VAR%. 

를 인쇄 할

C:\Users>test.cmd 
var=a * b "test" c(). 
+0

이 스크립트, 에 대한 좋은 해결책이 될 수도 있지만 나는 "컴파일러"을 쓰고있을 때, 나는 더으로 생성하는 스크립트를 원하는 :

예를 들어,이 그렇게 볼 수 있었다 아름다운. 변경하지 않아도되며 변수가있는 로직을 작성할 수 있으므로 안전하고 아름다운 코드를 생성 할 수있는 방법이 있어야합니다. – koko0

0

간단한 해결책은 큰 따옴표를 사용하여 인수를 호출하는 것입니다.

그러나이 인수에 큰 따옴표가 포함되어 있으면 작동하지 않습니다. 이 경우 우리는 eckes의 솔루션을 기반으로 솔루션을 구현할 수 있습니다. 함수의 루프를 수행하여 모든 매개 변수를 읽고 함수의 매개 변수로 복사 할 수 있습니다.

@echo off 

set var=With "" and a space 
call :call_var %var% 
goto:EOF 

:call_var 
set param= 
for /F " delims==" %%V in ("%*") do @set param=%param% %%V 
REM Test parameter 
echo %param% 
goto:EOF