2017-05-10 6 views
2

텍스트 파일에서 가져온 변수 배열을 만드는 배치 파일이 있습니다. 다음 :일괄 처리를 사용하면 각 개별 변수에 함수를 실행하기 위해 포함 할 수있는 값의 개수를 모르는 배열을 어떻게 반복할까요?

for /f "skip=1 tokens=9 delims= " %%a in (%findfile%) do set "_%%a=yes" 
set count = 0 
for /f "tokens=1* delims==#" %%b in ('set _') do (
    set /a count+=1 
    set x=%%b 
    set location[!count!]=!x:~1! 
) 
set %location% 

내가 배열에서 각 변수를 얻으려고 개별적으로 함수를 굳히는하지만, 그것을 어떻게 모를 수!

for %%i in (%location%\*.mp4) do (if not exist "%%~ni\" MD "%%~ni" 

    ffmpeg -i "%%i" -vframes 1 -f image2 -start_number 0 
    "%%~ni\%%~ni_Summary_%%3d.jpeg" 

) 

모든 HELP :

모든 변수를 저장 배열이 루프 내가으로 루프를 얻기 위해 노력하고있어 함수에 대한로 호출 할 수있는 위치는 FFMPEG 기능입니다 크게 환영합니다

+0

'설정 횟수 ='0 '으로 설정해야/수를 말했다
. 그대로, count * space *라는 변수를 * space * 0으로 설정합니다. 그것은 실패하지 않음으로 작동합니다. 'count'가 정의되지 않았기 때문에,'set/a count + = 1'가 올바르게 계산됩니다. 'set/count count + = 1 & set "위치 [! count!] = %% a"를 첫 번째 루프에서 사용할 수없고'location' 배열을 생성하고 계산할 이유가 없습니다. – Magoo

답변

3

set %location%set location이어야합니다. location으로 시작하는 모든 변수를 표시합니다.
(실제) 배열과 같은 것은 존재하지 않으며 단지 변수 집합입니다. 따라서 전체 컬렉션을 %location%으로 복사 할 수는 없습니다. 당신이 %count% 변수의 수를, 그래서 당신이 행복하게 for /L 사용할 수 : 0 '=

@echo off 
SetLocal EnableDelayedExpansion 
REM get locations from textfile: 
for /f "tokens=9" %%a in (file.txt) do set "_%%a=yes" 

REM translate into proper variables: 
set count=0 
for /f "tokens=1* delims==#" %%a in ('set _') do (
    set /a count+=1 
    set x=%%a 
    set _var[!count!]=!x:~1! 
) 

REM build the new bat file: 
(for /l %%i in (1 1 %count%) do (
    for %%a in ("!_var[%%i]!\*.mp4") do (
    ECHO ffmpeg -i "%%i" -vframes 1 -f image2 -start_number 0 "%%~na\%%~na_Summary_%%3d.jpeg" 
) 
))>new.bat 

type new.bat 
+0

> new.bat가 뭐죠? --- 은 호출되는 각 위치에 대해 새로운 배치 파일을 생성 할 예정입니까? – Jay1995

+0

아니요, 모든'ffmpeg' 명령을 포함하여 하나의 배치 파일을 만듭니다. (전체'for' 루프 주위에 parantheses가 추가로 있음) – Stephan

+0

고마워요 @Stephan, 저에게 큰 도움이되었습니다! – Jay1995

0

이미 요소 수가 있으므로 FOR/L 루프를 사용할 수 있습니다.

FOR /L %%n in (1 1 %count%) DO (
    set "content=!location[%%n]!" 
    call :subFunc content 
) 
... 

:subFunc 
set "var=!%1!" 
echo Process: !var! 
+0

어떻게 작동하는지 설명해 주시겠습니까? – Jay1995

+0

그리고 FFMPEG FOR 루프 외부에서이 작업을 수행합니까? – Jay1995

+0

Aack! 변수 이름으로'tmp'를 쓰지 마세요. 제발! 그것은 미리 정의 된 변수 (='temp')입니다. – Magoo