2012-09-11 5 views
1

spefic 디렉토리의 처음 10 개 파일 이름을 읽고 10 개의 다른 변수로 경로를 설정하는 배치 파일을 만들고 싶습니다. 이 등, file2.tif file1.tif 라는 이름의 파일이 많은 것 나는에 변수 filepath1 동일한를 설정하려는 내부가 \ 테스트과 : 간단한 예를 들어, 경로 C 것 첫 번째 파일의 경로는 c : \ test \ file1.tif 등이며 첫 번째 파일은 10 개입니다. 여기에 코드입니다 : 나는이 프로그램을 실행하면파일 이름 읽기 및

@echo off 
cd C:\TEST 
setlocal ENABLEDELAYEDEXPANSION 
FOR /f "delims=|" %%a IN ('dir /b') DO (
    CALL SET /a x = !x! +1 
    if !x! == 1 (
     CALL SET /a filepath!x!="C:\TEST\%%a" 
    ) 
) 
echo %filepath1% 
echo %filepath2% 
pause 
goto EOF 

, 루프 벌금에 대한을 수행 할 것 같지만 filepath1 것은 단지 0 표시하고 filepath2 아무것도 표시되지 않습니다. 나는이 문제가 if !X! == 1이고 filepath!x!으로 설정되어 있다고 생각합니다. !x!과 관련된 작업을 변경하면 루프가 중단됩니다. 변수를 올바르게 설정하고 10 개의 파일에 대해서만 작업을 수행하도록 루프를 제한하려면 어떻게해야합니까?

답변

1

당신의 orginal 코드가 "

  • :-) 다음 말이 안 (또는 필요하지 적어도이다) 것 몇 가지가 포함되어 있기 때문에, 나는 귀하의 질문에 정확한 도착하면 아주 확실하지 않다 delims = | " 옵션이 계산에 사용되는 경우 (help set 참조) 라인과 함께 사용하는 경우 귀하가 사용하는 옵션이 귀하의 케이스에서 아무 것도하지 않습니다.
  • /a 옵션이 산술에 사용되는 경우

어쨌든, 다음과 같은 작업을해야합니다 :

setlocal ENABLEDELAYEDEXPANSION 
cd C:\Test 
FOR /f %%a IN ('dir /b') DO (
    SET /a x = !x! +1 
    SET filepath!x!="C:\TEST\%%a" 

    if !x! equ 10 goto done 
) 
:done 
rem filepath1 to filepath10 are defined now, given there were up to 10 matching 
rem files in the first place. 

echo %filepath1% 
echo %filepath2% 

pause 

은 위의 코드는 오류가 확인하고 문제의 파일이 실제로 file10.tiffile1.tif이라고 확인하지 않습니다하지 않습니다. 귀하의 질문 (및 샘플 코드)에서 그것이 귀하의 경우에 정말로 필요한 것인지 명확하지 않습니다. 이 코드를 명확히하여 위 코드를 개선 할 수 있습니다.