2013-01-17 5 views
1

배치 파일에서 분할 선에 대해 논의하는 게시물이 많이 있지만, 필자의 요구 사항에 맞지 않는 것들을 얻을 수는 없습니다. IP 목록 집합을 포함하는 속성 파일을 갖고, 그 목록을 배치 파일로 처리하려고합니다.여러 줄에 걸쳐 변수가있는 처리 배치 파일

IPLIST_1=^ 
12.34.56.1^
21.43.65.2^
5.8.001.3 

IPLIST_2=^ 
222.11.33.1^
10.1.1.2 

하고 수행하는 배치 파일을 : 그래서 속성 (이 꽤 될 수 있으며, 한 줄이 어려운 읽을 수 있도록하는 것처럼 내가 한 줄에 목록을 원하지 않는)이 같은 파일 다음과 같이 입력하십시오 :

setlocal EnableDelayedExpansion 
FOR /f "delims=" %%x in (iplists.txt) DO (set "%%x") 
FOR %%A IN (%IPLIST_1%) DO (
some stuff 
) 

그러나 예상대로 작동하지 않습니다. 만약 내가이 모든 것을 같은 배치 파일은 괜찮 :

FOR %%A IN (^ 
12.34.56.1^
21.43.65.2^
5.8.001.3) DO (
some stuff 
) 

감사합니다, 폴

+0

당신은'SET IPLIST_1 = ...'을 의미합니까? (예제에는 'set'이 없습니다.이 질문은 오타입니까? 아니면 실제 코드입니까? (후자의 경우 작동하지 않아야합니다) –

+0

Hi Anton. 첫 번째 FOR 루프는 IPLIST_1 및 IPLIST_2를 설정하고 두 번째 FOR 루프는 IPLIST_1의 IP를 통과합니다. 그것은 어쨌든 의도입니다. – user265330

+0

변수를 설정하기 위해 __SET__ 명령이 있습니다. 'SET NAME = VALUE'는 괜찮지 만,'NAME = VALUE'을 설정하지 않으면 에러가납니다. 실제 코드에'SET' 키워드가 있습니까? –

답변

0
@echo off 
set "LIST=" 
for /f "tokens=1 delims=^^" %%I in (iplists.txt) do (

    setlocal enabledelayedexpansion 
    echo %%I | find "IPLIST_" && for %%P in (!LIST!) do (something with %%P) & ( set "IPLIST_=") 
    echo %%I | find "IPLIST_" || (set "LIST=!LIST! %%I") 
    endlocal 

) 

당신이 here.My 가정이 무엇인지 이해하기 힘들었다 :

  1. 을 파일 iplists.txt가 있습니다.

  2. 방망이가 각 l IST 전체 라인으로하지만, 당신이 FOR 루프의 각 목록을 처리 할

  3. (이 사실 fultile 임) IP를 별도의 라인에있는, 그래서 당신은 ^로 단결을 시도

위의 코드는 제 제안입니다 - 바깥 쪽 루프에서는 ^이 이스케이프됩니다. 전혀 필요하지 않지만 해를 끼치 지 않을 것입니다. 배치 스크립트와 같이 목록을 한 줄로 통합 할 수는 없습니다. 하지만 반복 항목은 공백으로 분리하고, 그러한 존재하지 않는 경우는 것 - 내가 부르게하여 List.txt 파일 라인을 읽기 시작할 초기에 대한 내부로 전달 빈 목록을 가지고있어 먼저와


아무것도하지 마세요. setlocal enabledelayedexpansion은 대괄호 안에 LIST를 변경하는 것입니다. 두 사람과 함께 echo %%I | find "IPLIST_" 나는 조건부 실행을 수행하고있다. %% 내가 포함하지 않은 라인에 IPLIST_ 문자열이 있으면 두 번째 라인이 실행되고 LIST가 다음 IP로 확장됩니다. "IPLIST_"가 포함되어 있으면 목록이 내부 FOR에서 처리되고 마지막에 삭제 된 첫 번째 행이 실행됩니다. 그런 다음 파일 끝까지 다시 시작합니다.

관련 문제