0

可以说我想创建一个批处理文件。我使用视频文件,并使用这个众所周知的工具MediaInfo。它在Windows上有一个CLI版本。命令提示符/批处理 - 如何使用第三方命令实现If/Else语句?

可以说我想重命名文件夹中的一堆文件。于是我运行此:

for /r %%i in (*.mkv) do call ren "%%i" "renamed_files.mkv" 

所以它的作用是,它拿起所有.mkv文件在目录并将其重命名。那很棒。

但是如果我只想重命名特定的.mkv文件而不是所有文件呢?例如。我有多个.mkv文件有音频,有一些没有。并且让我说我只想重命名那些有音频的。所以要做到这一点,我需要使用一些解决方案来扫描/检测哪些文件有音频。为此,我想为什么不使用MediaInfo CLI。所以我们运行这个命令:

mediainfo --inform="Audio;%ID%" file.mkv 

而且它所做的一切,它打印2这是音频轨迹,我们可以用它来确认音频存在和.mkv文件应该拿起重命名的ID。如果没有音频,它不会打印任何东西,空行,所以这些文件应该被跳过。

有意义,但我不知道如何将它包装在if声明中,并使其工作,因为它对我来说都是新手,我已经学习了2天的命令提示符和批处理文件。

或者,也许有人知道甚至更好的解决方案。除此之外,我对使用GUI安装第三方软件不感兴趣。

干杯!

回答

0

尝试

for /r %%i in (*.mkv) do (
    for /f "usebackq" in %%a (´mediainfo --inform="Audio;%ID%" file.mkv´) do set "audio=%%a" 
    if defined audio (
    call ren "%%i" "renamed_files.mkv" 
) 
) 

第二for循环执行括号中的命令,并将audio变量任何命令返回。如果它什么都不返回,那么audio变量将是未定义的,在这种情况下,if块将不会被执行。

+1

在OP的问题中,这个调用是多余的。您应该初始化音频以防止使用先前迭代中的残留。 – LotPings

+0

你为什么要设置'%audio%',只是使用'if not'%% a“==”“ren”%% i ...'。另外我不确定将每个包含音频的文件重命名为相同的名字是一个特别好的主意,也没有看到使用'call'的任何逻辑,_(我知道OP也这样做)._ – Compo

+0

嗯我没有什么问题,但.bat甚至不会运行,它只是眨眼。 – user3108268

相关问题