命令提示符/批处理 - 如何使用第三方命令实现 If/Else 语句?



假设我想创建一个批处理文件。我处理视频文件,我使用这个众所周知的工具MediaInfo。它在Windows上有一个CLI版本。

假设我想重命名文件夹中的一堆文件。所以我运行这个:

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

因此,它的作用是拾取目录中的所有.mkv文件并重命名它。真棒。

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

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

它所做的一切,它会打印2这是音轨的 ID,我们可以使用它来确认音频是否存在,并且应该拾取.mkv文件进行重命名。如果没有音频,它不会打印任何空行,因此应跳过这些文件。

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

或者也许有人知道更好的解决方案。除了我对安装带有 GUI 的第三方软件不感兴趣。

干杯!

试试

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循环在 parens 中执行命令,并将audio变量设置为命令返回的任何内容。 如果它不返回任何内容,则audio变量将未定义,在这种情况下,不会执行if块。

最新更新