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 пропускает первый пробел
отдельный токен от каждой строки каждого
файл. Пустые строки пропускаются. Вы
может переопределить разбор по умолчанию
поведение, указав необязательный
параметр "параметры". Это цитата
строка, которая содержит один или несколько
ключевые слова, чтобы указать другой разбор
опции. - справка для
Таким образом, вы получите только часть перед первым пробелом имени файла. Вы можете обойти это, используя
for /f "delims=" in ...
, чтобы указать, что токенизация должна выполняться без разделителей, по сути, каждый раз давая вам полную строку. Но на самом деле лучший способ - это тот, который я обрисовал в начале, просто использовать обычный for
для перебора файлов. Никаких сюрпризов с пробелами в именах файлов там, и это на самом деле делает ваши намерения намного яснее.
Я регулярно удивляюсь, почему люди склонны выбирать замысловатое и неправильное решение вместо простого, ясного и правильного.