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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1364743
flashdada
Posté le 12-05-2006 à 07:12:40  profilanswer
 

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

mood
Publicité
Posté le 12-05-2006 à 07:12:40  profilanswer
 

n°1365133
wackevat
Posté le 12-05-2006 à 14:49:58  profilanswer
 

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

n°1365159
flashdada
Posté le 12-05-2006 à 15:01:43  profilanswer
 

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

n°1365318
wackevat
Posté le 12-05-2006 à 16:43:50  profilanswer
 

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

n°1365454
flashdada
Posté le 12-05-2006 à 21:22:17  profilanswer
 

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.

n°1365457
wackevat
Posté le 12-05-2006 à 21:36:35  profilanswer
 

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 ;)


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

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

 

Sujets relatifs
[RESOLU] retourner l'extension d'un fichier dans un champ file avec JS aidez moi avec perl :mettre les données d'un fichier dans un tableau
Script batch automatisationproblème de lecture d'un fichier en cobol
[BATCH] positionner le errorlevelBatch pour transférer fichiers antérieurs à 2 jours
Fichier de sauvegarde c++mettre un fichier zip en téléchargement
fichier htaccess rebellebatch fermeture applications
Plus de sujets relatifs à : [batch] EnableDelayedExpansion et "!" dans les chemins de fichier


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