2014-06-15 3 views
2

조언 할 수 있는지 물어보고 싶습니다.배치 스크립트 - For 루프에서 동적 변수 이름 또는 배열 만들기

가이 같은 배치 또는 배열 또는 뭔가 동적 변수 이름을 만들 수 있다면 나도 몰라. 예를 들어 for 루프 앞에 for c = 0을 설정하고 for 루프 안에 c = c + 1을 설정하고이 숫자를 for 루프 안에 동적 변수 이름을 만들려면 다음과 같이 입력하십시오 : set entry % c % = 'somestring'

그리고 나중에 사용하십시오 이러한 번째 변수는 루프 밖에 예를 인쇄 출력 : 에코 % ENTRY1 % 에코 % ENTRY2 %

예 : 도움

@echo off 

set /a c=1 

for %%i in (list.txt) do (

set /a c=c+1 
set entry%c% = %%i 

) 

echo %entry1% 
echo %entry2% 

감사합니다.

+0

지연된 확장 변수를 조사하십시오. 'setLocal enableDelayedExpansion'입니다. – unclemeat

+1

참조 : [cmd.exe (배치) 스크립트의 배열] (http://stackoverflow.com/questions/10166386/arrays-linked-lists-and-other-data-structures-in-cmd-exe-batch-script)/10167990 # 10167990) – Aacini

답변

2

나는

for /f "tokens=1*delims=[]" %%a in ('find /n /v "" list.txt') do set "entry%%a=%%b" 

가 있지만 약

set entry%c% = %%i 

일괄 경고의 단어가 SET 문에 공간에 민감한 사용하십시오. 이 일을했다면, 그것은 "공간 thefirstlineofthefile"의 값을 "ENTRY1 공간"라는 이름의 변수를 설정합니다.

set "var=value" 구문을 사용하면 배치 라인의 뒤 공백이 var에 할당 된 값에 포함되지 않습니다.

+0

+1 매우 영리합니다. find의/v 스위치를 사용하여 빈 변수의 가능성을 없애고 물론/n 변수에 번호를 매기를 좋아합니다. 아주 좋은 라이너. – unclemeat

+0

좋아요! 고마워요. 정확히 내가 찾고 있었던 것. 도와 주셔서 감사합니다. – damian1baran

1

당신은, 지연 확장 변수를 사용하는 다른 c 항상 같은 값으로 확대 할 필요가있다.

또한 set 문에서 공백을 제거해야합니다. set entry%c% = %%i은 (예를 들어) entry1<space>이라는 변수를 생성합니다. 이렇게 확장해야하는 변수는 입니다. 따라서 연산자 = 주위의 공백을 제거하십시오.

@echo off 

setLocal enableDelayedExpansion 
set c=0 

for %%i in (list.txt) do (
    set /a c+=1 
    set entry!c!=%%i 
) 

echo %entry1% 
echo %entry2% 

또한 생성 한 모든 변수를 반복하려는 경우 다음과 같이 할 수 있습니다.

for /L %%i in (!c!, -1, 1) do echo !entry%%i! 

또는

for /L %%i in (1, 1, !c!) do echo !entry%%i!