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.
 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.
 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.
 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  | 
 
 
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