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

时间:2017-04-01 12:11:06

标签: batch-file variables cmd windows-10 mediainfo

我们使用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?如果我输入下一个%duration%,我会得到:

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

发生了什么事?如何将%duration%变量显示为46 min 57 s

2 个答案:

答案 0 :(得分:1)

for /f "usebackqDELIMS=" %%a

默认分隔符包括空格。此语法禁用分隔符,因此分配了整行。

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

不知道你试图用%46 malarkey做什么。请解释一下。

答案 1 :(得分:1)

在批处理文件中:

@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分57秒