2012-08-08 3 views
1

안녕하세요 누구든지이 문제에서 나를 도울 수 있습니까?배치 파일을 사용하여 여러 파일 만들기

여러 파일을 생성해야합니까 ?? 나는 모든 예를 든다. 어떤 폴더에서는 폴더 레코드라고 말합니다. "Record"폴더에는 "example2tought1023.au"라는 이름의 파일이 1 개 있습니다. 내가 포함하는 동일한 파일을 생성해야합니다, 그냥 숫자를 늘려 여러 번.

내가 얻을 같은 결과를해야 example2tought1023.au example3tought1024.au example4tought1025.au example5tought1026.au

이 내가 현재 가지고있는된다

SET count=9 

SET filename_1=example 
SET filename_2=thought 

SET extension=.au 

SET start_1=2 
SET start_2=1023 

SET source=%filename_1%%start_1%%filename_2%%start_2%%extension% 

FOR /L %%i IN (1, 1, %count%) DO (
    REM These two lines do not work! 
    SET /a n=%start_1%+%%i 
    SET /a number_2=%start_2% + %%i 

    SET destination=%filename_1%%number_1%%filename_2%%number_2%%extension% 

    ECHO %destination% 
    REM COPY %source% %destination% 
) 

PAUSE 

을하지만 FOR /L 루프 라인이 작동하지 않습니다

+0

@ user3163527 안녕하십니까! OP가 명령이 올바른지 확인할 수 있도록 필요한 변경 사항을 간단히'ECHO '하는 일괄 처리의 일반적인 기술입니다. 이 경우,'COPY' 명령은'REM'되었습니다. 결과가 올바르게 반향되었음을 확인한 후에'COPY' 행에서'REM'을 제거하기 만하면됩니다. 이것은 검증 될 때까지 아무 것도 실제로 * 발생하지 않음을 (관찰 된대로) 확인합니다. 질문에 '대답이 아닙니다'라고 표시되어 있습니다. 이것은 정상입니다. 우리는 귀하가 의견으로 답변하기에 충분한 담당자 (utation)가 없다는 것을 알고 있습니다. – Magoo

답변

2

어떤 라인이 작동하지 않는지 잘못 알았습니다 :-)

관련 문제 변수가 확장 될 때까지 기다립니다. 행을 파싱하면 백분율을 사용하는 일반적인 확장이 발생하고 괄호로 묶인 DO 절을 포함하여 전체 FOR 문은 한 번에 구문 분석됩니다. 그래서 다음 줄

SET destination=%filename_1%%number_1%%filename_2%%number_2%%extension% 

는의 값을보고있다 % NUMBER_1 %와 % 숫자 2 % 루프가 실행 된 전에 를 존재하는. 분명히 당신이 원하는 것이 아닙니다. 솔루션은 간단합니다. 지연된 확장 (구문 분석 시간 대신 런타임에 값)을 사용해야합니다. 당신은 setlocal enableDelayedExpansion을 사용하여 1 차 확장 확장을 활성화 한 다음 %number_1% 대신 !number_1!을 사용합니다.

변수 이름 (n vs number_1)과 일치하지 않습니다.

나는 1에서 카운트하는 대신 0에서 카운트 -1까지 카운트하려고한다고 생각합니다.

SET/A 식에서 변수를 사용할 때 변수를 명시 적으로 확장 할 필요가 없습니다. 퍼센트 또는 느낌표없이 변수 이름을 간단하게 사용할 수 있습니다. 그러나 이것은 SET/A 명령에서만 작동합니다.

각 할당 사이에 쉼표를 사용하여 단일 SET/A 명령으로 여러 계산 및 할당을 수행 할 수도 있습니다.

@echo off 
setlocal enableDelayedExpansion 

REM counts from 0 to count, so 8 = 9 copies 
set count=8 

set filename_1=example 
set filename_2=thought 

set extension=.au 

set start_1=2 
set start_2=1023 

set source=%filename_1%%start_1%%filename_2%%start_2%%extension% 

for /L %%i in (0, 1, %count%) do (
    set /a "number_1=start_1+%%i, number_2=start_2+%%i" 
    set destination=%filename_1%!number_1!%filename_2%!number_2!%extension% 
    echo !destination! 
    REM copy %source% !destination! 
) 

pause 
+0

원하는 결과를 보여주는 그의 예제를 보면 그는 %% i가 아니라 매번 1을 더하고 싶습니다. (결국 1,2,3,4,5 ....를 추가하게됩니다) – SeanC

+0

@SeanCheshire - Look 신중하게 - 나는 START 값에 %% i를 더하고 NUMBER 변수에 할당하므로 올바른 값을 제공합니다. 이것이 OP가 원래의 코드를 구조화 한 방법이기 때문에 나는이 방법을 사용했습니다. 편집 전의 버전은 설명하는 내용에 더 부합하며 단순히 값을 증가시킵니다. 그러나 두 방법 모두 동일한 결과를 제공합니다. – dbenham

+0

아. 나는 기본 숫자에 더하기보다는 오히려 증가하는 데 익숙한 * 길 *입니다. D – SeanC

관련 문제