如何阻止批处理文件打开新窗口?

如何阻止批处理文件打开新窗口?

我正在制作一个使用 ffmpeg 和 ffprobe 编码视频的批处理文件。但每次我将视频拖放到批处理文件上时,它都会打开一个新的命令窗口。

我怎样才能只打开一个命令窗口,并让批处理文件每次都在同一个窗口中运行,而不是打开一个新窗口?

我通过将视频文件拖放到批处理文件中来运行它。

这是我的批处理代码:

for /f %%i in ('D:\SOFTWARE\ffmpeg\bin\ffprobe -v error -select_streams v:0 -show_entries stream^=height -of default^=noprint_wrappers^=1:nokey^=1 "%~1"') do set height=%%i

IF %height% GEQ 2160 (

echo "its above 2160!"
set bitrate=35000

) ELSE IF %height% GEQ 1440 (

echo "its above 1440!"
set bitrate=16000

) ELSE IF %height% GEQ 1080 (

echo "its above 1080!"
set bitrate=8000

) ELSE IF %height% GEQ 720 (

echo "its above 720!"
set bitrate=5000

) ELSE IF %height% GEQ 480 (

echo "its above 480!"
set bitrate=2500

) ELSE IF %height% GEQ 360 (

echo "its above 360!"
set bitrate=1000

) ELSE (

echo "its below 360!"
set bitrate=1000

)

D:\SOFTWARE\ffmpeg\bin\ffmpeg -i "%~1" -c:v libx264 -preset slow -b:v %bitrate%k -c:a aac -b:a 192k -ac 2 "%~p1%~n1-out-h264.mp4"

cmd /k

答案1

set callback=%1
tasklist /v | find /I /c "MyUniqueTitle" > nul
if "%ERRORLEVEL%" == "0" exit

title MyUniqueTitle

:main
for /f %%i in ('D:\SOFTWARE\ffmpeg\bin\ffprobe -v error -select_streams v:0 -show_entries stream^=height -of default^=noprint_wrappers^=1:nokey^=1 "%callback%"') do set height=%%i

IF %height% GEQ 2160 (

echo "its above 2160!"
set bitrate=35000

) ELSE IF %height% GEQ 1440 (

echo "its above 1440!"
set bitrate=16000

) ELSE IF %height% GEQ 1080 (

echo "its above 1080!"
set bitrate=8000

) ELSE IF %height% GEQ 720 (

echo "its above 720!"
set bitrate=5000

) ELSE IF %height% GEQ 480 (

echo "its above 480!"
set bitrate=2500

) ELSE IF %height% GEQ 360 (

echo "its above 360!"
set bitrate=1000

) ELSE (

echo "its below 360!"
set bitrate=1000

)

D:\SOFTWARE\ffmpeg\bin\ffmpeg -i "%callback%" -c:v libx264 -preset slow -b:v %bitrate%k -c:a aac -b:a 192k -ac 2 "%~p1%~n1-out-h264.mp4"

set callback=nul

:loop
if not %callback%==nul goto main
goto loop

第一行将变量回调设置为第一个参数。

第二行检查是否有任何带有标题的实例我的唯一标题正在运行。如果是,则退出第 3 行。如果不是,则转到下一行并将标题设置为我的唯一标题允许另一个实例,您将因为第 2 行中的检查而开始退出。

最后它进入一个循环,不断控制是否设置了回调(通过另一个实例的第 1 行紧接着自行关闭),如果是,它就调用 main 来执行该参数。

希望这能帮到你!如果没有,请随意评论。

相关内容