我正在编写一个批处理脚本,使用 ffmpeg 下载视频。
首先,它需要从文本文件中读取下载代码(代码.txt)
然后它检查当前目录是否存在相同的文件,如果存在则增加一个新的文件名。
然后它开始下载,但是,我无法让这些代码一起工作。(增量方法有效,但没有“从 txt 文件读取”代码,如果我将两者结合起来,结果将是一个空白文件名。我认为这是因为循环代码不兼容。)
从txt文件读取(循环)代码:
@echo off
set prefix=title-
set resolution=720p
set extension=mkv
for /F "tokens=*" %%A in (code.txt) do (
title Downloading "%prefix%.%extension%" @ %resolution%
"%~dp0ffmpeg.exe" -loglevel info -stats -i "https://somesite.com/%%A&quality=%resolution%" -i "https://somesite.com" -headers "Origin: https://somesite.come" -c copy -disposition:s:0 default -bsf:a aac_adtstoasc "%prefix%.%extension%"
pause
并使用我从中找到的增量方法关联:
@echo off
setlocal EnableDelayedExpansion
SET "ffmpeg=your_path_to\ffmpeg.exe"
SET "output_folder=D:\rendered_files"
SET "extension=mov"
SET "prefix=Scene_"
rem do not set this, just define it empty:
SET "output_path="
call :get_output_path "%output_folder%" %prefix% %extension%
rem here goes your ffmpeg command line where %1 is input file and "%output_path%" is your destination
"%ffmpeg%" -i %1 ..... your filters end such ..... "%output_path%"
echo Done
endlocal & echo press any key to exit ... & pause>nul & goto :eof
:get_output_path <output folder> <prefix> <extension>
SET "i=0"
SET "formated_value=000"
:loop
SET "output_path=%~1\%~2%formated_value%.%3"
if exist "%output_path%" call :increase& goto :loop
goto :eof
:increase
SET /a "i=%i%+1"
SET "value=000000%i%"
SET "formated_value=%value:~-3%"
goto :eof
组合批处理脚本:
@echo on
echo.
setlocal EnableDelayedExpansion
set prefix=showabc-
set resolution=720p
set extension=mkv
SET "output_folder=%~dp0Downloads"
for /F "tokens=*" %%A in (code.txt) do (
SET "output_path="
call :get_output_path "%output_folder%" %prefix% %extension%
echo File "%prefix%%formated_value%.%extension%" will be saved at "%output_folder%".
title Downloading "%prefix%.%extension%" @ %resolution%
"%~dp0ffmpeg.exe" -loglevel info -stats -i "https://somesite.com/%%A&quality=%resolution%" -i "https://somesite.com" -headers "Origin: https://somesite.com" -c copy -disposition:s:0 default -bsf:a aac_adtstoasc "%output_path%"
)
pause
:get_output_path <output folder> <prefix> <extension>
SET "i=1"
SET "formated_value=001"
:loop
SET "output_path=%~1\%~2%formated_value%.%3"
if exist "%output_path%" call :increase& goto :loop
goto :eof
:increase
SET /a "i=%i%+1"
SET "value=000000%i%"
SET "formated_value=%value:~-3%"
goto :eof
这是我始终得到的结果: 截屏
它要么是“.mkv”,要么是没有递增数字的文件名。:((
抱歉,帖子太长了。希望有人能帮助我,谢谢大家!注意安全!
答案1
@echo off
cd /d "%~dp0" && setlocal enabledelayedexpansion
for /f tokens^=* %%a in ('type .\code.txt"')do call %:^) i "%%~a"
<con: rem./ & %__AppDir__%timeout.exe /t -1 & endlocal & goto=:EOF
%:^)
<con: set /a "_%~1+=1+1000"
if exist "%~dp0downloads\showabc-!_%~1:~-3!.mkv" && goto %:^)
<con: title <nul && title downloading "showabc-!_i:~-3!.mkv" @ 720p
echo\file "showabc-!_%~1:~-3!.mkv" will be saved at "%~dp0downloads".
"%~dp0ffmpeg.exe" -i "https://somesite.com/%~2&quality=720p" -i "https://somesite.com" ^
-headers "origin: https://somesite.com" -c copy -disposition:s:0 default -bsf:a ^
aac_adtstoasc -loglevel info -stats "%~dp0downloads\showabc-!_%~1:~-3!.mkv"
很抱歉,但我删除了您的变量以尝试理解您的代码并且不会在应用它们时犯错误。
如果我不明白你想做什么,我希望你能告诉我我迷失了北方的地方(请)...
我将在这里留下下面的代码以尝试帮助您,在您未来的评论中,通过更大更准确的信息(我或这里的其他操作员),我们可以理解并为您的案例提出更好的解决方案......
观察:1我们不知道你的code.txt
文件
观察:2我假设你的ffmpeg命令正确
观察:3 Goto :EOF
直接进入埃ndofFile,因此,立即结束执行,在你的:label
观察:4使用exit /b
如果您不想立即结束执行,那么您的增量应该在没有过早中断的情况下工作......