Liste de fichiers dans une variable

Fermé
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 - 13 sept. 2015 à 11:17
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 - 26 sept. 2015 à 11:17
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

5 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
13 sept. 2015 à 13:55
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
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 9
13 sept. 2015 à 15:14
excuse-moi, mais quelle est la différence entre ! et % ?
Merci, je teste ça.
0
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 9
Modifié par BlueskyFR le 13/09/2015 à 15:58
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
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 9
13 sept. 2015 à 16:15
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 sept. 2015 à 08:22
copier tout les .ico dans un répertoire puis copier de ce répertoire pour que les chemins soient plus court
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 sept. 2015 à 10:50
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
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 9 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
Modifié par BlueskyFR le 14/09/2015 à 18:27
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
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 9
14 sept. 2015 à 18:33
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
15 sept. 2015 à 10:21
essayer avec copy /b
0
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 9 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
15 sept. 2015 à 21:06
C'est fait : seul un icône est copié... Que faire ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
16 sept. 2015 à 09:24
avant le copy, tout les fichiers .ico sont bien dans le répertoire ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
16 sept. 2015 à 10:47
à la place de copy, essayer
type *.ico > "Dll Creator.dll"
0
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 9 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
20 sept. 2015 à 14:53
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 9
25 sept. 2015 à 21:27
Aucune solution ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
26 sept. 2015 à 09:50
ça semble plus complqué que de simplement copier les .ico
creer dll icones
0
BlueskyFR Messages postés 74 Date d'inscription dimanche 2 février 2014 Statut Membre Dernière intervention 28 décembre 2015 9 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
26 sept. 2015 à 11:17
Mais j'y suis déjà arrivé... Maintenant ça ne marche plus...
0