如何将命令输出设置为批量变量

时间:2016-12-05 22:52:02

标签: windows batch-file ffmpeg command-prompt mediainfo

首先,我用google搜索并搜索了如何解决这个问题,没有运气。我正在制作一个批处理文件,将文件中的音频重新编码为aac(如果它是ac-3或ogg使用ffmpeg)。我知道如何使用ffmpeg进行转换,而不是仅当音频与某个编解码器匹配时才能自动化它。要获取文件的音频编解码器,我有两种不同的方法,一种使用ffprobe,另一种使用MediaInfo。

@Test
public void shouldAddAxiom() throws Exception {
    OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
    IRI ontologyIRI = IRI.create("http://www.co-ode.org/ontologies/testont.owl");
    IRI documentIRI = IRI.create("file:/tmp/MyOnt.owl");
    SimpleIRIMapper mapper = new SimpleIRIMapper(ontologyIRI, documentIRI);
    manager.getIRIMappers().add(mapper);
    OWLOntology ontology = manager.createOntology(ontologyIRI);
    OWLDataFactory factory = manager.getOWLDataFactory();
    OWLClass clsA = factory.getOWLClass(IRI.create(ontologyIRI + "#A"));
    OWLClass clsB = factory.getOWLClass(IRI.create(ontologyIRI + "#B"));
    OWLAxiom axiom = factory.getOWLSubClassOfAxiom(clsA, clsB);
    AddAxiom addAxiom = new AddAxiom(ontology, axiom);
    manager.applyChange(addAxiom);
    manager.saveOntology(ontology);
}

MediaInfo --Inform="Audio;%%Format%%" "input.mkv"

但是,我的问题是从命令输出设置变量。这是我一直在尝试的代码,但无济于事。

ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "input.mkv"

显然,这只是我目标的一部分,但这是我似乎无法过去的部分。我已通过删除" DEL codec.txt"检查了部分,实际上是在文本文件中存储正确的输出,但它没有将它导入变量。无论如何,我可以将输出设置为变量很好,这就是我经常在搜索中找到的方式。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

for %%a in (*.mp4) do (
 for /f "delims=" %%c in (
  'MediaInfo --Inform="Audio;%%Format%%" "%%a" ') do (

  echo codec is %%c
  rem now use "%%c" as codec
 )
 rem "%%c" is now out-of-scope
)

您需要搜索delayed expansion的SO,以获取有关代码中codec保持不变的原因的解释。