Batch file 批处理程序脚本问题使用带空格的文件名中断
下面是一个批处理脚本,它调用mp3splt(一个将mp3拆分为5分钟长的分区的程序)Batch file 批处理程序脚本问题使用带空格的文件名中断,batch-file,mp3,Batch File,Mp3,下面是一个批处理脚本,它调用mp3splt(一个将mp3拆分为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文件包含空格时,它会中断。有人能提出解决方法吗?您可以引用包含文件名的变量: "%%a" 其他人在这里引用变量的说法无疑是正确的。这是它正常工作所必需的。但这也只是解决方案的一半 这里的问题是dir
for /f %%a IN ('dir /b *.mp3') do call c:\PROGRA~1\mp3splt\mp3splt -t 5.0 -o output\@f+-+@n+-+@t %%a
当mp3文件包含空格时,它会中断。有人能提出解决方法吗?您可以引用包含文件名的变量:
"%%a"
其他人在这里引用变量的说法无疑是正确的。这是它正常工作所必需的。但这也只是解决方案的一半
这里的问题是dir/b
会吐出一行行文本,每行包含一个文件名,如下所示:
foo bar.mp3
baz gak.mp3
track01.mp3
...
另一方面,for/f
用于逐行读取文件或其他内容(本例中为dir
输出)。。。但它也可以进行标记化。这意味着它将可配置位置的字符串拆分为单个标记
默认情况下,/F传递第一个空格
从每行的每行中分离令牌
文件将跳过空行。你
可以重写默认解析
通过指定可选的
“选项”参数。这是一篇引文
包含一个或多个字符串的字符串
用于指定不同解析的关键字
选项-
因此,您只获得文件名第一个空格之前的部分。你可以通过使用
for /f "delims=" in ...
指定标记化应该不使用分隔符,每次都会给出完整的行。但是一个更好的方法实际上是我在开始时概述的方法,即只使用常规的for
对文件进行迭代。文件名中的空格并不奇怪,它实际上使您的意图更加清晰
我经常感到惊讶的是,为什么人们倾向于选择一个复杂和错误的解决方案,而不是一个简单、清晰和正确的解决方案
for /f "delims=" in ...