以下是一个批处理脚本,它将mp3splt(一个将mp3 http://mp3splt.sourceforge.net/mp3splt_page/home.php分割成的程序)调用为5分钟长的分区。
for /f %%a IN ('dir /b *.mp3') do call c:\PROGRA~1\mp3splt\mp3splt -t 5.0 -o output\@f+-+@n+-+@t %%a
当mp3文件包含空格时会中断。任何人都可以提出解决方法吗?
答案 0 :(得分:2)
for %%a IN (*.mp3) do (
call c:\PROGRA~1\mp3splt\mp3splt -t 5.0 -o output\@f+-+@n+-+@t "%%a"
)
其他人在这里引用变量无疑是正确的。这需要它才能正常工作。但它也只是解决方案的一半。
你的问题是dir /b
吐出文本行,每行包含一个文件名,如下所示:
foo bar.mp3
baz gak.mp3
track01.mp3
...
另一方面, for /f
用于读取文件或其他内容(本例中为dir
输出)逐行... 但它也进行了标记化。这意味着它将可配置位置的字符串拆分为单个标记。
默认情况下,/ F传递第一个空白 每个行的每一行分开的标记 文件。空白行被跳过。您 可以覆盖默认解析 通过指定可选的行为 “选项”参数。这是引用的 包含一个或多个的字符串 用于指定不同解析的关键字 选项。 - help for
因此,您只能在文件名的第一个空格之前获取该部分。您可以使用
解决这个问题for /f "delims=" in ...
指定标记化应该没有分隔符,基本上每次都给你完整的行。但更好的方法实际上是我在开始时概述的那个只使用常规for
来迭代文件的方法。没有惊喜,文件名中有空格,这实际上让你的意图更加清晰。
我经常感到惊讶的是,为什么人们倾向于选择一个错综复杂的错误解决方案,而不是一个简单,清晰和正确的解决方案。
答案 1 :(得分:1)
您可以引用包含文件名的变量:
"%%a"