Windows CLI 不显示带空格的正确变量

Windows CLI doesn't show correct variables with spaces

MediaInfo有这个命令行工具,我们用它来打印视频文件信息。例如。我想获取视频文件时长值:

mediainfo --Inform=General;%Duration/String2% video.mkv
46 min 57 s

如您所见,它打印出正确的 46 min 57 s

现在假设我想将该值放入一个变量中。所以我们 运行 这个:

for /f "usebackq" %a in (`"mediainfo --Inform=General;%%Duration/String2%% video.mkv"`) do set duration=%a
set duration=%46

如您所见,它在新行中给出了 set duration=%46?如果我输入 next %duration% 我会得到:

'%46' is not recognized as an internal or external command,
operable program or batch file.

这是怎么回事?如何让我的 %duration% 变量显示 46 min 57 s?

for /f "usebackqDELIMS=" %%a

默认分隔符包括 space。此语法禁用定界符,因此分配了整行。

如果您是 运行 包含此行的批处理文件,metavariable a 需要有 2 %。如果根据提示您是 运行,则需要 %a。这也适用于赋值指令。

不知道您要用 %46 恶意键做什么。请解释。

在批处理文件中:

@echo off
for /f "tokens=*" %%a in ('mediainfo --Inform=General;%Duration/String2% video.mkv') do set duration=%%a
echo %duration%
pause

在CMD中

for /f "tokens=*" %a in ('mediainfo --Inform=General;%Duration/String2% video.mkv') do set duration=%a
echo %duration%

输出:

46 min 57 s