Liste de fichiers dans une variable

BlueskyFR Messages postés 76 Statut Membre -  
BlueskyFR Messages postés 76 Statut Membre -
Bonjour,

Je souhaite créer une dll contenant tout les icônes d'un dossier. J'ai décidé de passer par un script batch plutôt que par un logiciel tiers. Dans mon script, mon problème est que "à priori" ma variable est trop longue car je souhaite mettre la liste des fichiers dans une variable puis l'envoyer à un copy pour qu'il me mette ma liste d'icônes dans une dll (j'ai testé avec 2 icônes depuis le cmd et la dll est bien créée).

Voici le script :
@echo off
setlocal ENABLEDELAYEDEXPANSION
set /a try=0
set /p rep="Répertoire contenant tout les fichiers .ico : "
cd %rep%

if %errorlevel%==1 cls&&echo Erreur&&echo.&&pause&&exit

for /f "tokens=*" %%a In ('dir /s /b /a-d *.ico') Do call :process "%%a"
goto :eof

:process
if %try%==0 (
set ico="%1"
set /a try=1
) else (
set ico=%ico% + "%1"
)
goto :eof

copy /y %ico% "Dll Creator.dll"
endlocal


--
BlueskyFR

5 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    et comme ca ?
    set liste=
    for /f "tokens=*" %%a In ('dir /s /b /a-d *.ico') Do set liste=!liste! "%%a"
    echo !liste!
    0
    1. BlueskyFR Messages postés 76 Statut Membre 9
       
      excuse-moi, mais quelle est la différence entre ! et % ?
      Merci, je teste ça.
      0
  2. BlueskyFR Messages postés 76 Statut Membre 9
     
    Donc j'ai testé ta solution et ceci marche :

    setlocal ENABLEDELAYEDEXPANSION
    set liste=
    for /f "tokens=*" %%a In ('dir /s /b /a-d *.ico') Do set liste=!liste! + "%%a"
    echo !liste!
    pause
    endlocal

    Par contre, j'ai encore un problème : étant donné que j'ai rajouté un "+" car il m'en faut un pour tout copier à la fin dans un fichier dll, il faudrait que ce + et l'espace qui le suit n'apparaissent pas au début de la chaîne. Comment faire ? J'ai pensé à un for qui ne garde que la suite de la chaîne ou à un test pour ne pas le mettre la première fois mais je n'y suis pas arrivé...

    Merci d'avance pour votre aide !
    BlueskyFR
    0
  3. BlueskyFR Messages postés 76 Statut Membre 9
     
    Finalement le problème du + et de l'espace est résolu avec ceci :

    setlocal ENABLEDELAYEDEXPANSION
    set /a try=0
    set liste=
    for /f "tokens=*" %%a In ('dir /s /b /a-d *.ico') Do (
    if !try!==0 (set liste="%%a"&&set /a try=1)
    if !try!==1 (set liste=!liste! + "%%a")
    )
    echo !liste!
    pause
    endlocal
    

    Mais il y a encore un bug (malheureusement) au niveau du

    copy /y %liste% "Dll Creator.dll"

    qui n'accepte pas une chaîne si longue ni le paramètre "!liste!" (placé avant endlocal)

    Des idées ?
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      copier tout les .ico dans un répertoire puis copier de ce répertoire pour que les chemins soient plus court
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      je n'ai pas testé
      setlocal ENABLEDELAYEDEXPANSION
      set /a try=0
      set liste=
      set tmp=%TEMP%\xxx
      mkdir %tmp%
      for /f "tokens=*" %%a In ('dir /s /b /a-d *.ico') Do copy /y "%%a" %tmp%
      cd %tmp%
      for %%a In (*.ico) Do (
      if !try!==0 (set liste="%%a"&&set /a try=1)
      if !try!==1 (set liste=!liste! + "%%a")
      )
      echo !liste!
      copy /Y !liste! "Dll Creator.dll"
      0
      1. BlueskyFR Messages postés 76 Statut Membre 9 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Il faut juste changer le nom de ta variable %tmp% car c'est une variable d'environnement qui équivaut à %temp% ^^

        Malheureusement je ne vois ton message que maintenant mais j'avais déjà eu cette idée et... bug lors de la lecture de la dll : il me dis : aucun icônes dedans...

        Je teste quand même ton script pour voir ;)
        0
  4. BlueskyFR Messages postés 76 Statut Membre 9
     
    Pourtant l'autre jour j'ai testé de faire cette commande avec 2 fichiers .ico et la dll était lue sans problème...
    Maintenant, j'ai réessayé et ça ne marche plus, bizarre :(
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      essayer avec copy /b
      0
      1. BlueskyFR Messages postés 76 Statut Membre 9 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        C'est fait : seul un icône est copié... Que faire ?
        0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      avant le copy, tout les fichiers .ico sont bien dans le répertoire ?
      0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      à la place de copy, essayer
      type *.ico > "Dll Creator.dll"
      0
      1. BlueskyFR Messages postés 76 Statut Membre 9 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Non désolé, toujours le même problème...
        Et oui, avant le copy ou type, tout les fichiers .ico sont bien dans le répertoire %tmp%\icotmp

        Le seul icône disponible dans la dll est le premier icône à partir du début de l'alphabet...
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. BlueskyFR Messages postés 76 Statut Membre 9
     
    Aucune solution ?
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      ça semble plus complqué que de simplement copier les .ico
      creer dll icones
      0
      1. BlueskyFR Messages postés 76 Statut Membre 9 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Mais j'y suis déjà arrivé... Maintenant ça ne marche plus...
        0