Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1946 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  recuperer un nom de fichier sans extension dans un for

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

recuperer un nom de fichier sans extension dans un for

n°1327589
julienbret
Posté le 17-03-2006 à 21:12:10  profilanswer
 

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

mood
Publicité
Posté le 17-03-2006 à 21:12:10  profilanswer
 

n°1327621
wackevat
Posté le 17-03-2006 à 22:59:04  profilanswer
 

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.

n°1327839
julienbret
Posté le 18-03-2006 à 14:03:04  profilanswer
 

Merci nglechau pour ta réponse...
 

wackevat a écrit :

Tu ne sais pas utiliser la commande  
set  
et la boucle  
for  


 
Ca je sais, c'est pour cela que je poste. Generalement, je code avec des langages moins triviaux :P
 

wackevat a écrit :


 
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.


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


Message édité par julienbret le 18-03-2006 à 14:04:55
n°1327850
wackevat
Posté le 18-03-2006 à 14:47:17  profilanswer
 

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 :
  1. set AACTempPath=%%AACPath%%%b%


et celle-ci aussi :

Code :
  1. %AACPath%%%b%\%~na%AACExt%


 
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 :
  1. set AACTempPath=%AACPath%%%b


 
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.


Message édité par wackevat le 18-03-2006 à 14:49:38
n°1328675
julienbret
Posté le 20-03-2006 à 11:00:48  profilanswer
 

salut nglechau,
 
merci pour les conseils et le temps passé à me répondre mais là ça commence à bien faire ce langage de  :fou:  
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  :pt1cable:  
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é  :D  
 
 

n°1328840
wackevat
Posté le 20-03-2006 à 15:00:25  profilanswer
 

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 :D
 
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 ? ;)
 

n°1329307
julienbret
Posté le 21-03-2006 à 10:55:43  profilanswer
 

wackevat a écrit :

Si tu n'es pas à l'aise avec les options d'environnement, opte pour celles par défaut :D
 
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 ? ;)


 
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  :wahoo:  
 
      %CodecPath%iTunesEncode.exe -e "AAC Encoder" -i %PathAudio%%%b\%%a -o %PathEncode%%%b\%%~na%AACExt%
 
Alors continuant avec ces  :fou: 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 ?
 
 
 

n°1329383
wackevat
Posté le 21-03-2006 à 11:56:25  profilanswer
 

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.

n°1329447
julienbret
Posté le 21-03-2006 à 13:41:18  profilanswer
 

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


 
merci pour les trucs de dev... ça je sais faire  :p  
 
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 ?


Message édité par julienbret le 21-03-2006 à 13:46:23
n°1329459
wackevat
Posté le 21-03-2006 à 13:53:59  profilanswer
 

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.

mood
Publicité
Posté le 21-03-2006 à 13:53:59  profilanswer
 

n°1329482
julienbret
Posté le 21-03-2006 à 14:26:20  profilanswer
 

wackevat a écrit :

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.


 
MERCI m'sieur !!
J'ai oublié : pas de fin de ligne avec des ;  :lol:  
Eh bien, une bonne moulinette à venir et un ipod à remplir
 

n°1329489
wackevat
Posté le 21-03-2006 à 14:37:08  profilanswer
 

julienbret a écrit :

MERCI m'sieur !!
J'ai oublié : pas de fin de ligne avec des ;  :lol:


Pas compris :P
 
Et ce serait bien que tu ne m'appelles pas m'sieur ;)

n°1329529
julienbret
Posté le 21-03-2006 à 15:09:12  profilanswer
 

wackevat a écrit :

Pas compris :P
 
Et ce serait bien que tu ne m'appelles pas m'sieur ;)


 
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
 :jap:  

n°1329537
wackevat
Posté le 21-03-2006 à 15:13:14  profilanswer
 

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 :P


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  recuperer un nom de fichier sans extension dans un for

 

Sujets relatifs
ecriture fichier texte avec choix dossier destination par utilisateurcréation fichier texte avec choix du dossier par l'utilisateur
upload de fichier mais : SAFE MODE Restriction in effect.[VBA] fichier d'aide compilé
requête mysql pour récupérer plusieurs valeurs sur 1 champ[RESOLU] Recuperer des champs de formulaire "inconnus"
fichier swfmodification d' un fichier serveur par un poste client
Récupérer un nom de fichier (sans l'extension) en Php[php] Recuperer l'extension d'un fichier pour l'afficher
Plus de sujets relatifs à : recuperer un nom de fichier sans extension dans un for


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR