如何使用参数为cmd批量获取pid?

时间:2017-04-03 17:44:58

标签: batch-file cmd

我是MS批次(棒球)中的noobie。我需要通过VLC保存一些流媒体到文件。 这个脚本对我有用:

@echo off    
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" "http://STREAM" --sout=#transcode{vcodec=h264,vb=1400,scale=1,acodec=mpga,ab=192,channels=2,deinterlace}:file{dst="D:\SOMEFILE.mp4"}

但我需要在N秒后停止录音。所以我认为最好的方法是获得这个过程的pid并运行

timeout /t 120 /nobreak taskkill /t /pid %PID%

为此,我找到了一些解决方案:

@echo off

set "exe=C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
set "source=http://STREAM"
set "save-cmd=--sout=#transcode{vcodec=h264,vb=1400,scale=1,acodec=mpga,ab=192,channels=2,deinterlace}:file{dst="D:\SOMEFILE.mp4"}"

for /f "tokens=2 delims==; " %%a in ('wmic process call create '"%exe%" "%source%" %save-cmd%' ^| find "ProcessId"') do set PID=%%a
echo "%PID%"
timeout /t 120 /nobreak
taskkill /t /pid %PID%

我得到PID,但VLC以正常方式开放(不做任何事),因为我只是运行C:\Program Files (x86)\VideoLAN\VLC\vlc.exe

如何使用参数运行programm并获取它的PID? 谢谢!

1 个答案:

答案 0 :(得分:3)

根据VLC forums,您可以使用--run-time--stop-time参数在指定的时间后关闭VLC。

例如,添加--run-time 120 --stop-time=120 vlc://quit将在2小时后退出

更新了脚本:

@echo off
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" "http://STREAM" --sout=#transcode{vcodec=h264,vb=1400,scale=1,acodec=mpga,ab=192,channels=2,deinterlace}:file{dst="D:\SOMEFILE.mp4"} --run-time 120 --stop-time=120 vlc://quit