Liste de fichiers dans une variable

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. Contributeur
    hello
    et comme ca ?
    set liste=
    for /f "tokens=*" %%a In ('dir /s /b /a-d *.ico') Do set liste=!liste! "%%a"
    echo !liste!
    1. excuse-moi, mais quelle est la différence entre ! et % ?
      Merci, je teste ça.
  2. 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
    1. 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 ?
      1. Contributeur
        copier tout les .ico dans un répertoire puis copier de ce répertoire pour que les chemins soient plus court
      2. Contributeur
        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"
      3. @dubcekIl 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 ;)
    2. 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 :(
      1. Contributeur
        essayer avec copy /b
      2. @dubcekC'est fait : seul un icône est copié... Que faire ?
      3. Contributeur
        avant le copy, tout les fichiers .ico sont bien dans le répertoire ?
      4. Contributeur
        à la place de copy, essayer
        type *.ico > "Dll Creator.dll"
      5. @dubcekNon 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...