使用批处理从配置中读取

问题描述 投票:0回答:1

这是我的一个批处理文件中的代码,其中包含变量。

@echo off

REM -----choose coder-----------
set "coder=h264_nvenc"

REM ----Chose bitrate (3,5,8 etc)--------
set "bitrate=3"

REM ---Shoose fps (25,30,50,60)----
set "fps=30"

REM ----audiobitrate (96, 128,192,256,312)---
set "audiobitrate=128"

REM ---Audio samplerate (44100, 48000)-----
set "sampler=48000"

for %%i in (1.ishodniki*.mov,1.ishodniki*.mp4); do ffmpeg -i "%%i" -codec:v %coder% -b:v %bitrate%M -filter:v fps=30 -codec:a ac3 -b:a %audiobitrate%K -ar %sampler% "2.segments%%~ni.mp4"

@pause

我想从配置文件中读取变量,而不是从批处理文件中

我创建了一个

config.txt
, 它有这样的结构

-----choose the coder (libx264 or h264_nvenc)-----------
coder=libx264

----Choose bitrate(3,5,7 etc)--------
bitrate=3

---the name of the listfile---
list=list.txt

我应该如何读取 config.txt 以及如何在我的批处理中使用这些变量

windows variables batch-file config
1个回答
0
投票

这是您可以尝试的方法,它通过 for 循环读取所有变量名称,因此它会过滤每个 txt 行中“=”前面的所有内容,并创建一个具有相同名称的变量。 在第二个 for 循环中,它然后从“=”符号后面的同一行读取值,理论上您现在也可以通过扩展 txt 文件来创建新变量。

REM create the variables
for /f "tokens=1,2 delims== skip=2" %%A in (config.txt) do (
    set "%%A=%%B"
)

REM Fill the variables
for %%i in (%list%) do (
    ffmpeg -i "%%i" -codec:v %coder% -b:v %bitrate%M -filter:v fps=%fps% -codec:a ac3 -b:a %audiobitrate%K -ar %sampler% "2.segments%%~ni.mp4"
)

但是,您可能想要包含一些内容,以检查所有必需的变量是否已正确读取,以确保脚本不会随机崩溃。这是如何做到这一点:

if not defined VariableName (
    echo womp womp
    pause
    exit /b
)
© www.soinside.com 2019 - 2024. All rights reserved.