Windows Batch File: for/F læser kun første linje af mylist.txt og slet først linje efterfølgende

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg kører et batch script:


FOR /F "tokens=1" \%\%F IN (mylist.txt) do C:VideoConverterApplicationsffmpeg.exe ^
-f image2 -loop 1 -framerate 0.1 -i "\%\%~F" -i "\%~dpn1.mp3" -codec:v libx264 ^
-s 1920x1080 -acodec copy -strict experimental -movflags faststart -t 00:10:10.00 ^
-f mp4 "\%~dpn1.mp4"


I min mappe er følgende filer:


file001.mp3
file002.mp3
file003.mp3


mylist.txt indeholder:


pic001.jpg 
pic002.jpg 
pic003.jpg


I øjeblikket skaber scriptet 3 videoer med 3 forskellige baggrundsbilleder for hver mp3 i mappen. Det er forkert.


Jeg vil kun oprette disse tre videoer.


video 1 = file001.mp3 + pic001.jpg (line1) 
video 2 = file002.mp3 + pic002.jpg (line2)
video 3 = file003.mp3 + pic003.jpg (line3)


Kan nogen hjælpe mig med kommandoen /f? Tak for din hjælp.

Bedste reference


Jeg ville løbe gennem videoerne ved hjælp af for, skub mylist.txt ind i for -sløjfen via stdin (med en <) og lad set /p fange det line-by- linje (en gang per loop iteration). Noget sådan:




@echo off & setlocal

(
    for \%\%I in (*.mp3) do (

        rem // set /P grabs one line of input from stdin
        set /P "imagefile="

        setlocal enabledelayedexpansion
        if defined imagefile call :build "\%\%~I" "!imagefile!" "\%\%~dpnI.mp4"
        endlocal

        set "imagefile="
    )
) < mylist.txt
rem // The line above dumps mylist.txt into stdin, letting set /P grab one line at a time.

goto :EOF

:build <in\_mp3> <in\_image> <outfile>
C:VideoConverterApplicationsffmpeg.exe -f image2 -loop 1 -framerate 0.1 ^
-i "\%~1" -i "\%~2" -codec:v libx264 -s 1920x1080 -acodec copy -strict experimental ^
-movflags faststart -t 00:10:10.00 -f mp4 "\%~3"