代码之家  ›  专栏  ›  技术社区  ›  J. J.

Windows批处理文件:用于/F只读mylist的第一行。然后删除第一行

  •  1
  • J. J.  · 技术社区  · 6 年前

    我运行了一个批处理脚本:

    FOR /F "tokens=1" %%F IN (mylist.txt) do C:\VideoConverter\Applications\ffmpeg.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"
    

    我的文件夹中有以下文件:

    file001.mp3
    file002.mp3
    file003.mp3
    

    我的名单。txt包含:

    pic001.jpg 
    pic002.jpg 
    pic003.jpg
    

    目前,该脚本为文件夹中的每个mp3创建了3个带有3个不同背景图像的视频。这是错误的。

    我只想创建这三个视频。

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

    有人能帮我做这件事吗 /f 命令谢谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  2
  •   rojo    6 年前

    我会使用 for ,推我的列表。txt进入 对于 通过标准输入循环(带有 < ),然后让 set /p 逐行捕获(每个循环迭代一次)。比如:

    @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:\VideoConverter\Applications\ffmpeg.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"