批文件:将十进制值分配给variables

该脚本从OGG文件的目录中运行。

cd c:\dirWithOGG for %%f in (*.ogg) do ( sox %%f %%f pad 0 "soxi -D %%f" sox %%f %%f repeat 10 ) 

第一次我不得不创build一个批处理脚本,我认为这很容易。

 soxi -D %%f 

在它自己,上面返回一个十进制值。 出于某种原因,它不会从脚本中执行。 soxsoxi都在PATH的位置。

任何帮助表示感谢,谢谢。

如果你想使用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

实际上是因为我不得不将这些命令移到循环之外。 它将在循环内部不正确地工作,除非启用延迟扩展,并使用不同的语法来解决变量。 尽管如此,我更喜欢它的实现。

如果我没有记错, for要求在同一行上指定动作。 尝试以下操作:

 for %%f in (*.ogg) do sox %%f %%f pad 0 "soxi -D %%f" && sox %%f %%f repeat 10 

尝试在头上(或在纸上)展开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阅读以获取更多信息&#x3002;