Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理程序脚本问题使用带空格的文件名中断_Batch File_Mp3 - Fatal编程技术网

Batch file 批处理程序脚本问题使用带空格的文件名中断

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

下面是一个批处理脚本,它调用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/b
会吐出一行行文本,每行包含一个文件名,如下所示:

foo bar.mp3
baz gak.mp3
track01.mp3
...
另一方面,
for/f
用于逐行读取文件或其他内容(本例中为
dir
输出)。。。但它也可以进行标记化。这意味着它将可配置位置的字符串拆分为单个标记

默认情况下,/F传递第一个空格 从每行的每行中分离令牌 文件将跳过空行。你 可以重写默认解析 通过指定可选的 “选项”参数。这是一篇引文 包含一个或多个字符串的字符串 用于指定不同解析的关键字 选项-

因此,您只获得文件名第一个空格之前的部分。你可以通过使用

for /f "delims=" in ...
指定标记化应该不使用分隔符,每次都会给出完整的行。但是一个更好的方法实际上是我在开始时概述的方法,即只使用常规的
for
对文件进行迭代。文件名中的空格并不奇怪,它实际上使您的意图更加清晰

我经常感到惊讶的是,为什么人们倾向于选择一个复杂和错误的解决方案,而不是一个简单、清晰和正确的解决方案

for /f "delims=" in ...