Windows批处理以多个变量分隔同一文件夹中的文件

Posted

技术标签:

【中文标题】Windows批处理以多个变量分隔同一文件夹中的文件【英文标题】:Windows batch to separate files on the same folder in multiple variables 【发布时间】:2017-01-14 02:31:42 【问题描述】:

我有一个文件夹,里面有很多 4 通道 dvr 的录像。

每个文件都有特定的摄像机编号以及录制的开始和结束帧。

IE:对于 2 分钟的录制,我将这 8 个文件放在名为“videos”的文件夹中:

ch1_1-1800.avi
ch2_1-1800.avi
ch3_1-1800.avi
ch4_1-1800.avi
ch1_1801-3600.avi
ch2_1801-3600.avi
ch3_1801-3600.avi
ch4_1801-3600.avi

我可以使用此命令行手动将帧间隔的文件合并到单个 704x480 .avi 文件中

ffmpeg -i ch1_1-1800.avi -i ch1_2-1800.avi.avi -i ch3_1-1800.avi.avi -i ch4_1-1800.avi.avi -filter_complex "nullsrc=size=704x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=352x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=352x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=352x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=352x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=352 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=352:y=240" -b:v 2000k ch1234_1-1800.avi

但我正在寻找一种方法来使用 Windows 批处理文件自动处理“视频”文件夹中的所有文件。我使用 FOR 循环尝试了一些事情,但我不知道是否可以在同一个循环中设置多个变量。

有什么想法吗?

提前致谢

【问题讨论】:

“我尝试了一些东西......”什么东西?请分享!并且您需要提供明确的标准,以便确定哪些文件属于一起! 我有 4 个相同帧间隔的通道需要合并在一起 我认为文件名和 ffmpeg 示例上的帧间隔是关于文件组的明显提示。我的错。如上例所示,ch1-ch4 是频道,1-1800 和 1801-3600 是相对于视频录制的第一分钟和第二分钟的帧间隔。 【参考方案1】:

将每组文件相关参数构建到环境变量中。然后在调用批处理文件时使用这些累积变量。

    setlocal EnableDelayedExpansion  

    SET I_ARGS=
    SET OTHER_ARGS=

    for /f "tokens=*" %%a in ('dir /b *.avi') do (
        SET I_ARGS=!I_ARGS! -i %%a
        SET OTHER_ARGS=!OTHER_ARGS! blah
    )

    ffmpeg %I_ARGS% %OTHER_ARGS%

这显示了为 'dir /b *.avi' 返回的每个文件 (%%a) 构建环境变量的方法

【讨论】:

我还是不明白。您在找到的每个文件中将 I_ARGS 变量设置为“自动递增”,但如果我有超过 4 个文件,它会继续在同一命令行中添加“-i”。 你能发布你的更新代码和它生成的更新字符串 使用:@ECHO OFF setlocal EnableDelayedExpansion SET I_ARGS= SET OTHER_ARGS= FOR /f "tokens=*" %%a in ('dir /b *.avi') do ( SET I_ARGS=!I_ARGS! -i %%a SET OTHER_ARGS=!OTHER_ARGS! blah ) ECHO %I_ARGS% %OTHER_ARGS% 给我输出-i ch1_1-900.avi -i ch1_901-1800.avi -i ch2_1-900.avi -i ch2_901-1800.avi -i ch3_1-900.avi -i ch3_901-1800.avi -i ch4_1-900.avi -i ch4_901-1800.avi blah blah blah blah blah blah blah blah 并且我需要将相同帧间隔的一组ch1、ch2、ch3、ch4分开并运行ffmpeg命令。

以上是关于Windows批处理以多个变量分隔同一文件夹中的文件的主要内容,如果未能解决你的问题,请参考以下文章

是否可以处理与模式匹配的文本行并将其移动到与另一个模式匹配的另一个位置(在同一文件中)? [关闭]

awk基础

excel vba索引匹配数组以分隔文件

shell awk命令

多线程学习----CreateThread

使用逗号分隔符将单个 CSV 列批量转换为多个