gpt4 book ai didi

for-loop - 在 FOR 循环中分配多个变量的更有效方法?

转载 作者:行者123 更新时间:2023-12-04 23:05:43 25 4
gpt4 key购买 nike

我正在 try catch ffprobe 的输出以分配给两个变量 - 目前我只是运行循环两次以捕获 encodercodec_name标签。有没有更有效的方法可以在一个循环中做到这一点?

for /F "delims=" %%i in ('ffprobe -v error -show_entries format_tags^=encoder -of default^=nw^=1:nk^=1 %%a 2^>^&1') do set "encoder=%%i"
echo !encoder!

for /F "delims=" %%j in ('ffprobe -v error -show_entries stream^=codec_name -of default^=nw^=1:nk^=1 %%a 2^>^&1') do set "codec_name=%%j"
echo !codec_name!

这是 info 的完整代码 - 它是 FFMPEG 中的批处理反向函数。
@echo off
md "%cd%\_reversedFiles"

for %%a in (*.wav) do (
SETLOCAL enabledelayedexpansion
for /F "delims=" %%i in ('ffprobe -v error -show_entries format_tags^=encoder -of default^=nw^=1:nk^=1 %%a 2^>^&1') do set "encoder=%%i"
echo !encoder!

for /F "delims=" %%j in ('ffprobe -v error -show_entries stream^=codec_name -of default^=nw^=1:nk^=1 %%a 2^>^&1') do set "codec_name=%%j"
echo !codec_name!

ffmpeg -i %%a -af areverse -c:a !codec_name! "\_reversedFiles\%%~na.wav"
bwfmetaedit "\_reversedFiles\%%a" -a --ISFT="!encoder!"
)

为了便于共享,它需要在批处理文件中。

最佳答案

鉴于 ffmpeg命令行每个都返回一个非空行,您可以在同一组单个 for /F 中执行它们环形:

    rem // Initialise variable that is going to receive the first line:
set "ENCODER="
rem // Capture the output of both `ffmpeg` command lines:
for /F delims^=^ eol^= %%F in ('
rem/ // Execute both `ffmpeg` command lines one after another: ^
^& ffprobe -v error -show_entries format_tags^=encoder -of default^=nw^=1:nk^=1 "%%~a" 2^>^&1 ^
^& ffprobe -v error -show_entries stream^=codec_name -of default^=nw^=1:nk^=1 "%%~a" 2^>^&1 ^
') do (
rem // This captures the first non-empty line of text:
if not defined ENCODER set "ENCODER=%%F"
rem // This captures the last non-empty line of text:
set "CODEC_NAME=%%F"
)
echo Encoder: !ENCODER!
echo Codec: !CODEC_NAME!

关于for-loop - 在 FOR 循环中分配多个变量的更有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62265674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com