此脚本在OGG文件的目录中运行。
cd c:\dirWithOGG
for %%f in (*.ogg) do (
sox %%f %%f pad 0 "soxi -D %%f"
sox %%f %%f repeat 10
)
我第一次必须创建一个批处理脚本,我认为这很容易。
soxi -D %%f
就它本身而言,上面返回一个十进制值。出于某种原因,它不会从脚本中执行。 sox 和 soxi 位于路径的位置。
感谢任何帮助,谢谢。
答案 0 :(得分:1)
如果您想使用soxi -D %%f
的输出作为sox
的命令行参数,请按以下步骤操作:
FOR %%f IN (*.ogg) DO CALL :runsox "%%f"
GOTO :EOF
:runsox
soxi -D %1>tmpfile
SET /P decvalue=<tmpfile
sox %1 %1 pad 0 %decvalue%
sox %1 %1 repeat 10
如您所见,循环内的命令已移至循环正在调用的子例程。除此之外,soxi
的输出被重定向到一个文件,然后将其读入一个变量,该变量又用于将值传递给sox
。
实际上是因为变量我必须将命令移到循环之外。除非启用了延迟扩展并且使用了不同的语法来处理变量,否则它在循环内部将无法正常工作。不过我喜欢它如上所述。
答案 1 :(得分:0)
如果我没记错的话,for
要求在同一行上指定操作。请尝试以下方法:
for %%f in (*.ogg) do sox %%f %%f pad 0 "soxi -D %%f" && sox %%f %%f repeat 10
答案 2 :(得分:0)
尝试在头脑中(或在纸面上)展开FOR
:
FOR %%F IN (*.ogg) DO (
sox %%F %%F pad 0 "soxi -D %%F"
sox %%F %%F repeat 10
)
如果您有一个.ogg
文件,比如foo.ogg
,那么FOR
循环将导致执行以下两个语句。
sox foo.ogg foo.ogg pad 0 "soxi -D foo.ogg"
sox foo.ogg foo.ogg repeat 10
我认为第一行不会达到您的预期。它将运行sox
并将该行的其余部分作为参数传递。它不会执行soxi -D foo.ogg
并将其替换为输出。 DOS根本不会以这种方式工作。尝试类似:
SETLOCAL EnableExtensions
FOR %%F IN (*.ogg) DO (
FOR /F %%N IN ('soxi -D %%F') DO (
sox %%F %%F pad 0 "%%N"
sox %%F %%F repeat 10
)
)
ENDLOCAL
这可能有用。我没有访问DOS框,所以我可能有内部FOR
语法错误。您可能必须使用反引号或双引号指定子命令。 FOR
循环的增强版本需要启用IIRC的命令扩展。尝试在命令提示符下键入FOR /?
或阅读http://www.computerhope.com/forhlp.htm以获取更多信息。