2013-02-19 1 views
0

변수를 구문 분석하려고합니다. NAMELIST = "AAA BBB CCC"라고 말하고 각각을 변수로 저장하십시오. 그런 다음이 새로운 변수는 다른 명령에서 사용해야합니다. 예 :Windows 배치 : 한 명령의 출력을 변수로 설정하고 다른 명령에서 사용하는 방법은 무엇입니까?

perl.exe C:\action.pl <VAR1> 
perl.exe C:\action.pl <VAR2> 
perl.exe C:\action.pl <VAR3> 

저는 Windows 배치가 처음이므로 도움을 주시면 감사하겠습니다.

나는이 스레드의 알고 있지만 완전히 배치의

Windows batch files: How to set a variable with the result of a command?

답변

1

"각 변수를 하나씩 저장"을 참조 할 때 여기에 관련된 개념은 배열입니다. 루프를 사용하여 간단한 방법으로,

perl.exe C:\action.pl %VAR1% 
perl.exe C:\action.pl %VAR2% 
perl.exe C:\action.pl %VAR3% 

또는 :

setlocal EnableDelayedExpansion 
set i=0 
for %%a in (%namelist%) do (
    set /A i=i+1 
    set VAR!i!=%%a 
) 

이 방법은, 직접 각 배열 요소를 사용할 수 있습니다 : 당신은 3 개 배열 요소에이 방법을 NAMELIST 변수의 말씀을 나눌 수 있습니다 :

for /L %%i in (1,1,3) do perl.exe C:\action.pl !VAR%%i! 

편집 : 당신은 % i 서 %의 이전 값을 대신 사용합니다 NAMELIST 변수의 값을 무제한으로이 방법을 사용할 수있다 3 개 (더 나은 점은 "n"으로 바꾸십시오). 또한 표준 배열 표기법을 다음과 같이 사용하는 것이 좋습니다. VAR[%%i] :

setlocal EnableDelayedExpansion 
set namelist=AAA BBB CCC DDD EEE FFF 
set n=0 
for %%a in (%namelist%) do (
    set /A n+=1 
    set VAR[!n!]=%%a 
) 
for /L %%i in (1,1,%n%) do perl.exe C:\action.pl !VAR[%%i]! 
+0

이것은 완벽하게 작동합니다! 호출 루프에서 3을 지정하지 않으려면 방법이 있습니까 "/ L %% i in (1,1,3)" –

+0

@Varun_S : 예! 내 대답에서 편집을 확인하십시오. – Aacini

0

변수가 for 루프를 사용하여 설정할 수있는 솔루션을 이해하지 않습니다. 나는 링크에서 주어진 예제를 설명하려고 노력할 것이다.

/F는 "delims ="A의 (command)이 theValue %%를 @set 않는 = %% 여기

/F는 토큰으로의 출력을 중단하는데 사용된다 들어. "delims ="는 명시적인 구분 기호가 주어지지 않으므로 "space"로 가정합니다. %% a는 루프의 인덱스 변수와 비슷하지만 인덱스 변수가 숫자 값을 갖는 프로그래밍 언어의 전통적인 인덱스 변수 대신 일괄 적으로 인덱스 변수가 토큰, 즉 명령 출력을 저장할 수 있습니다. set 명령은 "theValue"변수를 명령의 출력/토큰을 보유하는 %% a로 설정합니다. 문이 따라서 경우 :

for /f "delims=" %%a in (`echo Hi everyone!`) do @set theValue=%%a 

theValue will then hold "Hi" as it is the first token seprated by space. 

당신은 당신의 요구 사항에 따라 자신의 구분을 지정할 수 있습니다. 희망이 도움이!

+0

감사합니다. Gaurav. 하지만 변수를 사용하여 "echo hi everyone"대신 NAMELIST를 어떻게 사용합니까? 변수로 바꾸려고했지만 나에게 적합하지 않습니다. –

+0

for/f "delims ="%% a in ('echo % NAMELIST %') @set theValue = %% a 시도해 보셨습니까? –

+0

예. 신경 쓰지 마라. 그것은 우리 환경의 잘못이었다. 재부팅을 시도하고 작동합니다. 감사! –

관련 문제