Batch file 如何使用批处理脚本转换特定目录中的所有文件

Batch file 如何使用批处理脚本转换特定目录中的所有文件,batch-file,video,ffmpeg,Batch File,Video,Ffmpeg,我有一个.h264格式的文件夹中的视频,我想将它们转换为mp4。现在,默认情况下,我可以使用ffmpeg执行以下操作: 命令如下: ffmpeg -i youtube.flv -c:v libx264 filename.mp4 但是,正在添加新的h264文件,我希望继续转换视频,以便将其用于我的python脚本 我知道我可以用它来初始化变量 SET /A num=1 但是,即使添加了新的视频,我如何编写一个批处理脚本来逐个从目录中获取所有视频呢 我写了这篇文章,但它不起作用: @echo o

我有一个.h264格式的文件夹中的视频,我想将它们转换为mp4。现在,默认情况下,我可以使用ffmpeg执行以下操作: 命令如下:

ffmpeg -i youtube.flv -c:v libx264 filename.mp4
但是,正在添加新的h264文件,我希望继续转换视频,以便将其用于我的python脚本

我知道我可以用它来初始化变量

SET /A num=1
但是,即使添加了新的视频,我如何编写一个批处理脚本来逐个从目录中获取所有视频呢

我写了这篇文章,但它不起作用:

@echo off
SET /A num=1

for file in E:\Records\1\*.h264
do
    ffmpeg -i "$file" -c:v libx264 E:\Recods\1\converted\%num%.mp4
    move E:\Records\1\"$file" E:\Records\1\done\
    set /A num=%num%+1
done
PAUSE

我正在制作一个“完成”文件夹,并将已转换的视频移动到该文件夹中,然后将转换后的视频放入转换后的文件夹中。。现在,我只需要每小时运行一个任务计划程序,这样,如果有新条目,它应该将其转换并移动到相应的文件夹。

您可以使用for循环批量遍历文件夹中的所有文件(即使应用了过滤器),如下所示:

@echo off
setlocal EnableDelayedExpansion
set /a vid=0
cd /d "your_Folder\Goes here"
for %%f in (*.h264) do (
  ffmpeg -i "%%~f" -c:v libx264 "!vid!.mp4"
  set /a vid=!vid!+1
)
那么这里发生了什么?
第一行用于使程序在正确的目录中运行。
之后,使用您的命令处理该目录中以
.h264
结尾的所有文件(在您的情况下可能是另一个结尾;仅从问题中提取)。为此,文件路径被放置在输入文件的位置,计数器连同
。mp4
被放置为输出文件。
计数器有点复杂,因为括号集是如何成批计算的,这是一个完整的块。对于这个问题,有很多问题和答案。查找“延迟扩展批”,您将发现类似的内容


将其作为定期运行的任务计划程序任务放置,应该可以保持文件夹的更新。为了实际监控我发现的文件夹,它可以与任务调度器结合使用,在启动时运行。如果监控触发,您可以执行上面的批处理文件,并且应该在每次添加文件时运行该批处理文件。您还可以使用文件筛选器调整powershell文件,使其符合您的需要。

使用任务计划程序运行脚本是一种选择吗?抱歉,我不知道任务计划程序的功能。我是批处理脚本的初学者。任务调度程序可用于在某些触发器下运行脚本或其他任务。例如,这包括每小时、每天或每周。因此,您可以在一定的时间间隔内每次执行一个脚本来刷新文件列表。除此之外,我认为还有一些问题涉及到听文件夹这个话题。是的,我做了一些研究。。我认为任务调度程序在这里会很好。。我可以将已转换的数据移动到同一目录中的不同文件夹中,并每1小时运行一次任务计划程序,这样,如果存在新文件,则它将被转换。继续阅读您尝试使用的命令的帮助。您用于
for
命令的语法与帮助文件显示的语法甚至不接近。打开cmd提示符并键入:
for/?
,而正斜杠对某些命令有效,但对80%的其他Windows控制台命令无效。我建议您始终使用反斜杠作为文件路径。它可以工作,但我希望将转换后的文件命名为:1.mp4、2.mp4等,以便我更容易用python脚本处理。。现在,如何在for循环中递增计数器。。上述要递增的代码不是递增的。。谢谢,我不知道这是一个要求,让他们编号。我编辑了我的答案:)很高兴我能帮忙:)