【问题标题】:Command Prompt/Batch - How to implement If/Else statements using 3rd party commands?命令提示符/批处理 - 如何使用 3rd 方命令实现 If/Else 语句?
【发布时间】:2017-08-09 22:01:56
【问题描述】:

假设我想创建一个批处理文件。我处理视频文件,我使用这个众所周知的工具 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 的第 3 方软件不感兴趣。

干杯!

【问题讨论】:

    标签: windows batch-file command-line-interface command-prompt mediainfo


    【解决方案1】:

    试试

    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 块将不会被执行。

    【讨论】:

    • 在 OPs 问题中,调用是多余的。您应该初始化音频以防止使用以前迭代的残余。
    • 你为什么要设置%audio%,就用if not "%%a"=="" ren "%%i…。此外,我不确定将每个包含音频的文件重命名为相同的名称是一个特别好的主意,使用call, 似乎也没有任何逻辑(我知道 OP 也这样做了)。
    • 嗯我不知道怎么了,但 .bat 甚至不会运行,它只是闪烁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2014-11-21
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多