recuperer un nom de fichier sans extension dans un for - Shell/Batch - Programmation
Marsh Posté le 17-03-2006 à 22:59:04
Tu ne sais pas utiliser la commande
set
et la boucle
for
set /?
et lis l'aide, notamment le paragraphe concernant l'expansion retardée de variables d'environement.
La méthode la plus simple, dans ton cas, serait d'utiliser directement des valeurs %%b et %%a au lieu d'initialiser des variables supplémentaires.
Marsh Posté le 18-03-2006 à 14:03:04
Merci nglechau pour ta réponse...
wackevat a écrit : Tu ne sais pas utiliser la commande |
Ca je sais, c'est pour cela que je poste. Generalement, je code avec des langages moins triviaux
wackevat a écrit : |
J'ai essayé de le faire, mais le fait d'insérer un \ dans mon code de sortie path\nom_de_fichier.extension de fichier renvoie :
ex : %AACPath%%%b%\%~na%AACExt%
I:\mon_album~na.m4a
au lieu de renvoyer :
I:\mon_album\montitre.m4a
J'ai donc suivi ton conseil et appelle maintenant CMD /V:ON pour l'expansion retardée des variables d'environnement.
Mon code est donc
set AACTempPath=!ACPath! %%b
mais rien n'y fait, ma variable est toujours vide
Je sèche...
Marsh Posté le 18-03-2006 à 14:47:17
Bon, quand je disais que tu ne savais pas utiliser la commande
set
ceci comprenait également l'usage des signes %, et là tu n'as toujours pas pigé Ils sont interprétés dans l'ordre, de gauche à droit.
Donc déjà cette ligne est fausse :
Code :
|
et celle-ci aussi :
Code :
|
La syntaxe de
set
est
set [option] variable=[valeur]
VAR est une variable
%VAR%, %a, %%a sont des valeurs.
%a à la ligne de commandes et %%a dans un script.
Alors le bon code (en dehors du contexte, ici = boucle for) est :
Code :
|
Je te laisse corriger la deuxième affectation.
Après, pour l'expansion retardée des variables d'environnement, pour éviter d'évoquer cmd avec les options appropriées, tu peux appeler la commande
setlocal
avec la bonne option, au début du script.
Réctifie déjà tout ça et poste ta nouvelle version, avec ou sans l'expansion retardée des variables d'environnement, c'est comme tu préfères.
Marsh Posté le 20-03-2006 à 11:00:48
salut nglechau,
merci pour les conseils et le temps passé à me répondre mais là ça commence à bien faire ce langage de
s'il faut passer par des artifices "d'expansion retardée de variables", tout ça pour faire une bete affectation... même un pointeur c'est + simple
donc ok pour ma ligne fausse, j'avais vu... erreur de frappe
mais avec tous les CMD /e:on, CMD/v:on, setlocal et modif de <delayedExpansion> dans <command processor> de ma table de registre,
set AACTempPath=!AACTempPath! %AACPath%%%b
donne nada
de toutes façons, même en virant les variables temp de boucle, le résultat auquel je veux arriver ne marche pas, car le fait d'introduire un "\" dans l'affactation sur le format ~na%Variable "tue" le formatage de la variable de sortie !
Pense que je vais faire un bon vieux truc en langage compilé
Marsh Posté le 20-03-2006 à 15:00:25
julienbret a écrit : de toutes façons, même en virant les variables temp de boucle, le résultat auquel je veux arriver ne marche pas, car le fait d'introduire un "\" dans l'affactation sur le format ~na%Variable "tue" le formatage de la variable de sortie ! |
Si tu n'es pas à l'aise avec les options d'environnement, opte pour celles par défaut
Par contre, tu n'avais toujours pas compris qu'il fallait utiliser
%%a
au lieu de
%a dans un batch. Donc :
%%~na
et non pas
%~na.
Et je ne comprends pas ce que tu veux présenter par
~na%Variable
encore une faute de frappe ?
Marsh Posté le 21-03-2006 à 10:55:43
wackevat a écrit : Si tu n'es pas à l'aise avec les options d'environnement, opte pour celles par défaut |
Quand tu dis dans un batch, tu veux dire dans une boucle ?
C'est quand même chelou votre langage
Vive le $ !
M'enfin bon, celui qui n'essaie pas est un ....
Donc suivant tes conseils, j'ai viré les variables temporaires, et j'arrive à un truc comme ça, qui marche ! Enfin ! Merci
%CodecPath%iTunesEncode.exe -e "AAC Encoder" -i %PathAudio%%%b\%%a -o %PathEncode%%%b\%%~na%AACExt%
Alors continuant avec ces de variables/paramètres, je veux utiliser un applicatif externe avant mon encodage pour mettre à niveau tous mes waves.
J'ai donc Besweet que j'appelle comme ca
BeSweet.exe -core( -input "repertoire_entree\fichier" -output "répertoire_sortie\fichier" -2ch ) -azid( -s stereo -g 0.80 )
pour ceux que ca interesse le param -azid normalise mes fichiers a 80%
donc %ENCPath%Besweet.exe -core( -input %PathAudio%%%b\%%a -output %NormalizePath%%%b\%%a ) -azid( -s stereo -g 0.80 )
avec %%b le répertoire "mon_album" et %%a le fichier "mon_titre"
Ben pareil, ça marche po.
Encore un truc de sorcier ?
Marsh Posté le 21-03-2006 à 11:56:25
julienbret a écrit : Quand tu dis dans un batch, tu veux dire dans une boucle ? |
Nop c'est-à-dire que tu écris les commandes dans un fichier puis lancer ce dernier au lieu de les exécuter directement à l'invite de commandes.
Pour le deuxième souci, il n'y a pas d'espace dans ton chemin ? Poste le script proprement pour voir. Tu peux aussi placer un
echo
avant la commande et une
pause
à la fin du batch, éventuellement commenter
@echo off
au début, pour vérifier si les variables sont correctement initialisées et afficher les messages d'erreur.
Marsh Posté le 21-03-2006 à 13:41:18
wackevat a écrit : Nop c'est-à-dire que tu écris les commandes dans un fichier puis lancer ce dernier au lieu de les exécuter directement à l'invite de commandes. |
merci pour les trucs de dev... ça je sais faire
ce que je ne comprends pas, c'est que cette commande
%ENCPath%BeSweet.exe -core( -input "%ENCPath%%inFile%" -output "%CNVPath%%outFile%" -2ch ) %ENCParam%
marche à l'extérieur d'une boucle, et à l'intérieur, même echo de cette ligne plante !
Par contre, dans la boucle, un echo de la première partie
echo %ENCPath%BeSweet.exe -core( -input "%ENCPath%%inFile%" -output "%CNVPath%%outFile%" -2ch )
marche et renvoie :
W:\TEST_AAC\BeSweet.exe -core( -input "W:\TEST_AAC\infile.wav" -output "W:\
TEST_AAC\CONVERT\outfile.wav" -2ch
MAIS SANS LA PARENTHESE FERMANTE
pareil pour les paramètres passés en variable :
echo %ENCParam%
marche et renvoie
-azid( -s stereo -g 0.80
MAIS SANS LA PARENTHESE FERMANTE
C'est un probleme avec les caractères speciaux ?
Marsh Posté le 21-03-2006 à 13:53:59
Essaie le caractère d'échappement, c'est-à-dire :
^)
Sans quoi cette parenthèse fermante est interprétée comme celle de la boucle for.
Marsh Posté le 21-03-2006 à 14:26:20
wackevat a écrit : Essaie le caractère d'échappement, c'est-à-dire : |
MERCI m'sieur !!
J'ai oublié : pas de fin de ligne avec des ;
Eh bien, une bonne moulinette à venir et un ipod à remplir
Marsh Posté le 21-03-2006 à 14:37:08
julienbret a écrit : MERCI m'sieur !! |
Pas compris
Et ce serait bien que tu ne m'appelles pas m'sieur
Marsh Posté le 21-03-2006 à 15:09:12
wackevat a écrit : Pas compris |
Dans les langages "normaux", on aime bien mettre des ; à la fin des lignes
Comme ça l'interpreteur il sait où il va quand il trouve des )
Voila Mdame
Encore merci
Marsh Posté le 21-03-2006 à 15:13:14
julienbret a écrit : Dans les langages "normaux", on aime bien mettre des ; à la fin des lignes |
Ah oki, je n'avais pas fait le lien
Marsh Posté le 17-03-2006 à 21:12:10
Je viens d'ecumer tout ce forum et j'ai pqs trouvé de réponse, alors voilà ma question
j'ai recuperé un ipod et j'ai un stock de wav sur mon ordi
pour eviter la conversion "a la mano" avec itunes, j'utilise iTunesEncode, qui encode en AAC en ligne de commande
les parametres à passer sont fichier_entree.wav fichier_sortie.m4a
J'utilise des variables pour stocker l'extension de fichier m4a
mon script va chercher dans un répertoire qui contient des albums en wave, WAVPath, et pour chaque album appelle ensuite l'encodeur pour chaque titre, qui vont etre écrits dans le répertoire iTunes selon la meme arborescence de répertoire AACPath (le nom de l'album).
iTunesEncode se trouve lui dans CodecPath
mon probleme c'est que je crée une variable temp pour chaque album et pour chaque titre (AACTempPath et AACFile), qui sont perpetuellement vides.
Comprend pas où est mon erreur
Si qqun a une idée, merci
set WAVPath=O:\
set AACPath=I:\
set CodecPath=W:\
set AACExt=.m4a
Set AACTempPath=
for /f "delims=" %%b in ('dir "%WAVPath%" /b') do (
set AACTempPath=%%AACPath%%%b% / Définit l'album dans le dossier iTunes
md AACTempPath / Crée le dossier album dans le dossier iTUnes
for /f "delims=" %%a in ('dir "%AACTempPath" /b') do (
set AACFile=%~na%AACExt% / Définit la chanson moins l'extension wav
CodecPath\iTunesEncode.exe -e "AAC Encoder" -i %%a -o %AACFile% /Appelle l'encodeur en passant en parametre de sortie fichier_sortie.m4a
)
)
pause