批量 |回显多个变量到文件
BATCH | echo multiple variables to file
目录包含 2 个(或更多)任意名称的视频文件。
video1.mkv
video2.mkv
需要找出每个视频的时长。为此,我们使用 MediaInfo.
setlocal EnableDelayedExpansion
for %%a in (*.mkv) do (
for /f "usebackq" %%a in (`"mediainfo --Inform=Video;%%Duration%% %%a"`) do set duration=%%a
echo "!duration!" > "data.txt"
)
问题是,它只打印 1 value/duration(我认为是最后一个文件)。有效,只买一份。
如何让它与目录中存在的所有文件一起工作?
只需使用 >>
而不是 >
,它会附加而不是覆盖
setlocal EnableDelayedExpansion
for %%a in (*.mkv) do (
for /f "usebackq" %%a in (`"mediainfo --Inform=Video;%%Duration%% %%a"`) do set duration=%%a
echo "!duration!" >> "data.txt"
)
如果 mediainfo.exe 位于路径中的某处,则不需要引用此名称,但由于 .mkv
文件名很可能包含空格,因此更改引号如下:
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
( For %%a in (*.mkv) do (
Set "Duration="
For /f "delims=" %%b in (
'mediainfo --Inform^=Video^;%%Duration%% "%%a"'
) do set "Duration=%%b"
echo !Duration!,"%%a"
)
) > "data.txt"
不知道它属于哪个文件的持续时间没有多大用处,所以这个带有 *.mpg 文件的示例 运行 附加了文件名。
2595000,"R:\video\Der Traum ihres Lebens - Das Erste 2010-07-09 20-15-00.mpg"
5333160,"R:\video\Dirty Harry 3 - Der Unerbittliche - RTL2 2010-05-29 00-10-00.mpg"
5651960,"R:\video\Die Spur des Falken - Das Erste 2010-05-28 00-40-00.mpg"
只要 MediaInfo 在 %Path% 中,我一直这样做的方式就是使用临时文本文件。
for %%a in (*.mkv) do set mkv=%%a&& call :one
goto eof
:one
mediainfo "--Inform=General;%%Duration%%" "%mkv%" >> filetemp.txt
set /p dur= < filetemp.txt
echo %dur%
pause
del filetemp.txt
:eof
我使用它的变体使用 ffmpeg 对我的电视节目进行编码,使用 MediaInfo 从我一周内录制的 1-15 个节目中获取持续时间、帧速率和帧高度。
目录包含 2 个(或更多)任意名称的视频文件。
video1.mkv
video2.mkv
需要找出每个视频的时长。为此,我们使用 MediaInfo.
setlocal EnableDelayedExpansion
for %%a in (*.mkv) do (
for /f "usebackq" %%a in (`"mediainfo --Inform=Video;%%Duration%% %%a"`) do set duration=%%a
echo "!duration!" > "data.txt"
)
问题是,它只打印 1 value/duration(我认为是最后一个文件)。有效,只买一份。
如何让它与目录中存在的所有文件一起工作?
只需使用 >>
而不是 >
,它会附加而不是覆盖
setlocal EnableDelayedExpansion
for %%a in (*.mkv) do (
for /f "usebackq" %%a in (`"mediainfo --Inform=Video;%%Duration%% %%a"`) do set duration=%%a
echo "!duration!" >> "data.txt"
)
如果 mediainfo.exe 位于路径中的某处,则不需要引用此名称,但由于 .mkv
文件名很可能包含空格,因此更改引号如下:
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
( For %%a in (*.mkv) do (
Set "Duration="
For /f "delims=" %%b in (
'mediainfo --Inform^=Video^;%%Duration%% "%%a"'
) do set "Duration=%%b"
echo !Duration!,"%%a"
)
) > "data.txt"
不知道它属于哪个文件的持续时间没有多大用处,所以这个带有 *.mpg 文件的示例 运行 附加了文件名。
2595000,"R:\video\Der Traum ihres Lebens - Das Erste 2010-07-09 20-15-00.mpg"
5333160,"R:\video\Dirty Harry 3 - Der Unerbittliche - RTL2 2010-05-29 00-10-00.mpg"
5651960,"R:\video\Die Spur des Falken - Das Erste 2010-05-28 00-40-00.mpg"
只要 MediaInfo 在 %Path% 中,我一直这样做的方式就是使用临时文本文件。
for %%a in (*.mkv) do set mkv=%%a&& call :one
goto eof
:one
mediainfo "--Inform=General;%%Duration%%" "%mkv%" >> filetemp.txt
set /p dur= < filetemp.txt
echo %dur%
pause
del filetemp.txt
:eof
我使用它的变体使用 ffmpeg 对我的电视节目进行编码,使用 MediaInfo 从我一周内录制的 1-15 个节目中获取持续时间、帧速率和帧高度。