突然有这样的需求:同时打开一个文件夹下的多个视频播放任务。如何来实现呢?
理所当然的是想到Potplayer本身可以开多个进程,也就是多开窗口播放,但是经过实验,发现在资源管理器中选取多个视频源并不能实现同时打开并播放!如下图:
开始.bat
想要实现同时打开任务,就要用到批处理中的循环语句FOR
,其语法还挺有深度,这里我们使用最基础的不带参数型:
for %%i in (*) do (PotPlayerMini64 %%i)
其中%%i
表示取当前路径下的文件,do
后面是执行语句!使用PotPlayer可执行exe应用来打开该文件!【PS:我在PATH环境中加了PotPlayer软件路径,因此可直接使用,否则需要写上全路径地址!如:D:\Pot_Player64_1.7.21516_Dev_20210716\PotPlayer64\PotPlayerMini64.exe
】
好了,准备好文件,如下图所示:
把批处理文件放入媒体文件同目录下,我们执行尝试...
发现了两个问题:
㈠ .bat
批处理执行是阻塞型应用,也就是单任务执行机制,即当上一条指令完全执行完毕才能执行下一条,因此无法实现同时打开的需求!!
㈡ PotPlayer无法打开任意格式的文件,如.bat批处理文件,如下图:
完善
针对问题,进行改善:
for %%i in (*.mp4) do (start cmd /k PotPlayerMini64 %%i)
指定需要遍历的文件格式,为mp4
,而执行操作是:每次调取单独的cmd命令来打开播放器,这里使用了start
和cmd
命令,加了/k
参数,即可以看到cmd窗口中调取指令情况,如图:
如果想执行完毕cmd自动关闭cmd窗口,可以换/c
。从简的话也可以省略cmd
命令,如:
for %%i in (*.mp4) do (start PotPlayerMini64 %%i)
OK!!!基本需求以及达到了。
进一步
还可以拓展...比如批处理文件放在单独的路径下来执行,可以这样修改:
cd ToPlay
for %%i in (*) do (start cmd /k PotPlayerMini64 %%i)
其中的ToPlay
文件夹存放待播放的媒体文件。
当然还可以基于参数传入来执行批处理任务,如:
cd %1
for %%i in (*) do (start cmd /k PotPlayerMini64 %%i)
然后在cmd中执行该.bat,如图:
【PS】还有一种方法是在资源管理器中将ToPlay
文件夹拖放到.bat
上松开执行!
总结
现在基本上可以很轻松地实现想要的效果了。当然啦,还能再改善功能,例如可以进一步筛选目录下的某某文件来播放,或者定义每次开启播放器的间隔时长等等。还可以将这些功能包装成GUI可视的窗口应用。。。
有个细节想说明一下,如果cmd这样调用:
PotPlayerMini64 filename
即不加后缀名调用,那么播放器是只开不放的,也没有将该媒体文件加入至播放列表中,要想正常开启并播放则需要加上后缀名。