Je suis en train d'exécuter une boucle for
cmd qui ressemble à ceci:Comment définir et utiliser les variables de chaîne de nom de fichier dans la ligne de commande cmd?
for %f in (*.mp4) do (
set outfile=%f:mp4=mp3%
ffmpeg -i %f -vn -ar 44100 -ac 1 -b:a 32k -f mp3 %outfile%
)
Le script est censé saisir tous les fichiers * .mp4, exécutez la commande ffmpeg sur eux, puis nommez le fichier résultant identique comme mp4 avec seulement l'extension changée en * .mp3.
Cela ne fonctionne pas. La sortie est littéralement nommée %outfile%
. Si je devais deviner, il y a quelque chose de mal avec l'initialisation ou l'appel de la variable outfile
. J'ai aussi pensé que c'est peut-être un problème de type de données. %f
est peut-être un pointeur, pas une chaîne, donc une sorte d'extraction de chaîne ou de conversion de type est nécessaire.
Comment puis-je définir et utiliser un nom de fichier comme variable de chaîne dans cmd?
Vous devez activer et utiliser [expansion différée] (http://ss64.com/nt/delayedexpansion.html) pour 'outfile' lorsque vous écrivez * et * lire cette variable dans un seul bloc de code; sinon, la variable est étendue à la valeur qu'elle contient lorsque le bloc entier est analysé; ou, encore plus facile, suivez [conseil de MCND] (http://stackoverflow.com/a/41813600) ci-dessous ... – aschipfl