for %%a IN (*.mp3) do (
call c:\PROGRA~1\mp3splt\mp3splt -t 5.0 -o output\@[email protected][email protected] "%%a"
)
Ce que les autres disent de citer ici la variable est sans doute correct. C'est nécessaire pour que cela fonctionne correctement. Mais ce n'est également que la moitié de la solution.
Votre problème ici est que dir /b
crache des lignes de texte, chacun contenant un nom de fichier, comme ceci:
foo bar.mp3
baz gak.mp3
track01.mp3
...
for /f
d'autre part est faite pour la lecture de fichiers ou autre chose (le dir
sortie dans ce cas) ligne par ligne ... mais il fait également tokenizing. Cela signifie qu'il divise les chaînes à des endroits configurables en jetons individuels.
Par défaut,/F passe à la première découpe jeton séparé de chaque ligne de chaque fichier . Les lignes vides sont ignorées. Vous pouvez remplacer le comportement d'analyse par défaut en spécifiant le paramètre "options" facultatif. Ceci est une chaîne citée qui contient un ou plusieurs mots-clés pour spécifier différentes options d'analyse . - help for
Ainsi, vous obtenez uniquement la partie avant le premier espace du nom de fichier. Vous pouvez contourner ce problème en utilisant
for /f "delims=" in ...
de préciser que tokenizing doit être fait sans délimiteurs, vous donnant essentiellement la ligne complète à chaque fois. Mais une meilleure façon est en fait celle que j'ai décrite au début pour simplement utiliser le for
régulier pour itérer sur les fichiers. Pas de surprises avec des espaces dans les noms de fichiers et cela rend votre intention beaucoup plus claire.
Je suis régulièrement surpris de voir pourquoi les gens ont tendance à choisir une solution tortueuse et incorrecte sur une solution simple, claire et correcte.
Ce n'est pas assez :-) – Joey