[batch] EnableDelayedExpansion et "!" dans les chemins de fichier

EnableDelayedExpansion et "!" dans les chemins de fichier [batch] - Shell/Batch - Programmation

Marsh Posté le 12-05-2006 à 07:12:40    

Bonjour,
 
j'ai écrit un script batch sous Windows XP SP2 qui parcours une arborescence de dossiers à la recherche de musiques (mp3, wav, etc) afin d'en reporter le chemin d'accès dans des fichiers HTML. Le but est de générer des fichiers HTML qui permettent d'afficher un classement par ordre alphabétique des albums, avec affichage de la jaquette du CD (à partir de l'image folder.jpg placée dans chaque dossier) et de lancer la lecture de l'album par un clic dessus. Un autre script batch génère au préalable des playlists.m3u pour chaque album.
Voilà pour la présentation ;)
 
Cà fonctionne plutôt bien, mais je rencontre un petit problème.
Comme je fais évoluer des variables dans des boucles FOR, j'utilise

Code :
  1. setlocal EnableDelayedExpansion


Le problème est que, si un nom de dossier ou de fichier contient le caractère "!", le batch ne le reconnaît pas, voir fait sauter une partie de la ligne à écrire dans le fichier HTML.
Donc, la question : peut-on remédier à ce problème ?
 
Je vous donne un petit script simplifié qui met le problème en évidence. Pour le tester : dans C:\ créez un dossier "test" puis un sous-dossier "hehe !". Vous verrez que tant qu'on ne retire pas le "setLocal" du batch, le "!" n'est pas reconnu.

Code :
  1. @ECHO OFF
  2. setlocal EnableDelayedExpansion
  3. rem set characters codes for correctly write accents in html files
  4. CHCP 1252
  5. CLS
  6. SET rootFolder=C:\\test
  7. FOR /R "%rootFolder%" /D %%I IN ("*" ) DO (
  8. ECHO %%I
  9. )
  10. PAUSE


Personnellement, je n'utilise pas de caractères spéciaux dans mes noms de fichier ou dossier, mais hélas je suis un des derniers irréductibles dans ce cas (comme quelques uns d'entre vous sûrement) ;) et j'aimerai bien pouvoir résoudre ce problème, afin que ce petit soft puisse fonctionner chez toutes les personnes qui voudront s'en servir.
D'ailleurs, si çà vous intéresse, je le mettrai bientôt à disposition. L'idée de faire çà n'est pas de moi, mais je dois dire qu'àprès l'avoir fait, je l'ai adopté  :)  
 
Merci de votre aide :)

Reply

Marsh Posté le 12-05-2006 à 07:12:40   

Reply

Marsh Posté le 12-05-2006 à 14:49:58    

Bah tu n'as qu'à pas utiliser cette option : appeler une fonction à la place.

Reply

Marsh Posté le 12-05-2006 à 15:01:43    

wackevat a écrit :

Bah tu n'as qu'à pas utiliser cette option : appeler une fonction à la place.


hum, pourrais-tu être plus explicite ?  :)  
Utiliser une fonction à la place de quoi ?
 
merci

Reply

Marsh Posté le 12-05-2006 à 16:43:50    

... à la place de cette option :D
 
Fais une recherche dans le forum, j'en ai parlé à moult reprises.

Reply

Marsh Posté le 12-05-2006 à 21:22:17    

Merci de répondre rapidement nglechau.
J'avais déjà fait une recherche avant de poster avec "EnableDelayedExpansion", il y a 6 messages et je n'y trouve hélas pas de solution pour mon problème. Depuis le temps que je bidouille avec les batchs, c'est la 1° fois que j'en viens à écrire sur un forum, je trouve habituellement mes réponses en cherchant sur le net, parfois après de longues heures de lecture :) Si j'en viens à poser la question ici, c'est bien parce que cette fois, je ne trouve pas  :)  
Tu parles de remplacer l'utilisation de cette option par une fonction, mais je ne vois pas ce qui pourrait la remplacer.
Si tu as un lien vers un autre message qui en parle, je suis preneur. Sinon je continuerai à chercher  :pt1cable: ;)
 
Merci.

Reply

Marsh Posté le 12-05-2006 à 21:36:35    

Je te fais un exemple rapide :

Code :
  1. @echo off
  2. setlocal
  3. for ...%%i in (...) do (
  4.   call :process %%i
  5. )
  6. goto end
  7. :process
  8. echo %%i
  9. :end
  10. endlocal


 
process est donc une fonction (procédure). Elle est appelée par la commande call.
 
N'oublie pas un endlocal après un setlocal.
 
Sinon, pour la recherche, essaie plutôt avec expansion retardée blabla... comme mots-clés ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed