【问题标题】:what I'm doing wrong我做错了什么
【发布时间】:2016-08-26 09:24:30
【问题描述】:

这是批次

for /f "skip=9 tokens=1-3" %%x in ('sox.exe Heavyrainambienc2801.wav -n stat') do (
  if "%%x %%y"=="Maximum delta:" set maxDelta=%%z
)
echo %maxDelta%

我得到的是空白回声,而不是最大增量值

Samples read:          11832320
Length (seconds):    123.253333
Scaled by:         2147483647.0
Maximum amplitude:     0.999939
Minimum amplitude:    -0.999969
Midline amplitude:    -0.000015
Mean    norm:          0.488960
Mean    amplitude:    -0.000082
RMS     amplitude:     0.570900
Maximum delta:         1.999878
Minimum delta:         0.000000
Mean    delta:         0.651948
RMS     delta:         0.807396
Rough   frequency:        10804
Volume adjustment:        1.000

Try: -t raw -e mu-law -b 8

C:\1>echo
ECHO is on.

我不确定这是否重要,但它在 Windows 10 上运行

【问题讨论】:

  • 你的代码没问题。是within another code-block吗?
  • 请提供一个具体的问题标题!! sox.exe 的输出是如何格式化的——ANSI/Unicode?​​span>
  • 不,它是单独的代码,我不知道sox.exe的格式
  • 如果您知道第 10 行有您想要的信息,为什么还要添加if 命令?只需在该行取第三个标记...
  • 我指的是sox.exe输出,而不是应用程序本身;尝试执行以下操作:sox.exe Heavyrainambienc2801.wav -n stat > "\path\to\file.txt",然后用记事本打开返回的文件file.txt,然后转到“文件»另存为...”;在“另存为”对话框中,“编码:”字段中选择了什么?

标签: batch-file sox


【解决方案1】:

我不确定是什么错误,但有一个解决方法: 将您正在使用的命令的输出放在文本文档中并从那里读取。这对我有用。

我直接将文本块复制到文件中进行测试;如果还有其他内容,您可能需要检查 %%x 和 %%y 是否为所需值。如果不是,您知道在哪里仔细查看:)

在批处理脚本结束时,您可以删除文件。

@echo off
sox.exe Heavyrainambienc2801.wav -n stat 2>output.txt
for /f "skip=9 tokens=1-3" %%x in (output.txt) do (
if "%%x %%y"=="Maximum delta:" set maxDelta=%%z
)
echo %maxDelta%
del output.txt
pause

【讨论】:

  • 它也不起作用。 output.txt 文件为空 :(
  • 糟糕!可能是>output.txt前面少了一个空格,导致我的测试命令发生了变化...
  • 您也可能需要使用2>output.txt 来代替;一些程序输出到 STDERR 而不是 STDOUT。
  • 如果您在原始问题中发布的是输出,那么sox 必须按照@SomethingDark 的建议写信给 STDERR。
  • 哦,好的。我不是很喜欢批处理;它只是作为一种解决方法出现在我的脑海中:)
猜你喜欢
  • 2011-06-01
  • 2021-04-14
  • 2021-04-19
  • 2017-03-13
  • 2017-01-18
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多