在相对文件夹中的文件上运行SOX批处理


1

我有一个Windows批处理脚本在各种文件上运行SOX命令,但我不知道如何让批处理文件在SOX可执行文件的相对路径上运行。目前所有文件都在根目录中,并输出到/组合。

批处理脚本:

cd %~dp0
mkdir combined
FOR %%A IN (*.mp3) DO sox static.mp3 %%A "combined/%%~nxA"
pause

我希望脚本在目录“audiotracks”中的文件上运行sox命令,并将其输出到“combined”目录。为了给你一个想法,这将是所需的文件夹结构:

/root
  sox.exe
  batch.bat
  static.mp3
     /audiotracks
       audio1.mp3
       audio2.mp3
       audio3.mp3
       audio4.mp3
     /combined
       audio1out.mp3
       audio2out.mp3
       audio3out.mp3
       audio4out.mp3

这有可能,还是有更好的方法呢?任何帮助将不胜感激。非常感谢!

Answers:


1

尝试先切换到diretory。改变保存路径。(两个连续的点表示父文件夹。)

cd %~dp0
mkdir combined
cd audiotracks
FOR %%A IN (*.mp3) DO sox static.mp3 %%A "../combined/%%~nxA"
cd ..
pause

没工作。它正在audiotracks文件夹中寻找sox.exe。有没有办法将它指向根文件夹中的sox.exe?
Matteo Cuellar Vega 2012年

刚刚将sox.exe和库移动到audiotracks文件夹中它可以工作,但是如何让它在root中使用sox呢?
Matteo Cuellar Vega 2012年

我想我可以让批处理脚本将新文件夹中包含的所有mp3(例如“/ input”)移动到“/ audiotracks”然后将它们输出到“combined”并从“/ audiotracks”中删除mp3。我只是想为用户制作一个更简单,更清洁的“一键式”解决方案。
Matteo Cuellar Vega

刚尝试使用move命令,效果很好。非常感谢你的帮助。非常感激!
Matteo Cuellar Vega

0

与大多数编程任务一样,有多种方法可以执行您想要的操作。您当前的实施与工作解决方案相差无几。真正的问题是你从错误的角度思考问题。audiotracks您应该考虑将结果输出到相对combined目录,而不是尝试处理相对目录中的文件。以下是您的脚本的调整方式:

cd %~dp0
mkdir combined
cd audiotracks
FOR %%A IN (*.mp3) DO sox ..\static.mp3 "%%A" "..\combined\%%~nxA"
pause

另一种更灵活的实现可能是使用命令的/f参数for。(运行for /?以获取更多详细信息。)这样做将允许您为输入和输出使用相对路径。

cd %~dp0
mkdir combined
FOR /f "tokens=*" %%A IN ('dir /b .\audiotracks\*.mp3') DO sox static.mp3 "%%A" ".\combined\%%~nxA"
pause

让我们分解一下:

  • /f 表示一次一个令牌以单引号(在parens内)处理命令的输出。
  • "tokens=*"表示将整行输出解析为单个标记。(基本上,它意味着空格不被视为分隔符。)
  • 'dir /b .\audiotracks\*.mp3' 表示在audiotracks目录中列出所有* .mp3文件,没有日期,大小或其他元数据。

不幸的是,这不起作用。它返回:sox FAIL格式:无法打开输入文件`Audio1.mp3':没有这样的文件或目录。我想它试图从根目录获取文件。
Matteo Cuellar Vega 2012年

另一个解决方案对我有用,但感谢您的帮助。我不断学习每一个帮助!
Matteo Cuellar Vega 2012年

什么是输出dir /b .\audiotracks\*.mp3?如果输出只给你文件名而不是完整的路径名,那么调整脚本如下: FOR /f "tokens=*" %%A IN ('dir /b .\audiotracks\*.mp3') DO sox static.mp3 ".\audiotracks\%%A" ".\combined\%%~nxA"
HairOfTheDog
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.