comment récuperer des infos d'un fichier .txt

comment récuperer des infos d'un fichier .txt - Shell/Batch - Programmation

Marsh Posté le 24-08-2005 à 15:40:28    

Bonjour,
 
je cherche à réaliser un petit batch pour récuperer en tant que variable les noms des fichiers contenu dans dans un repertoire. Il n'y a que 4 fichiers dans ce repertoire.
 
Voilà ou j'en suis... mais cela ne fonctionne pas.
 
merci de votre aide
 
 

Code :
  1. @echo off
  2. dir /b/p "c:toto">liste
  3. for /f "tokens=* delims=" %%a in (liste) do (
  4. set variable=%%a
  5. set variable2=%%b
  6. set variable3=%%c
  7. set variable4=%%d)

Reply

Marsh Posté le 24-08-2005 à 15:40:28   

Reply

Marsh Posté le 24-08-2005 à 23:25:57    

Salut,
 
Bien sûr que comme ça, ça ne fonctionne pas. La boucle for lit le fichier d'entrée et procède ligne par ligne.
 
Dans ton cas, à la sortie :
variable=la dernière ligne
les autres=vide
 
Fais
for /?
pour l'aide et les exemples.
 
Enfin, n'oublie pas les séparateurs de chemin : c:toto n'existe pas.

Reply

Marsh Posté le 25-08-2005 à 08:57:42    

Merci mais j'avais déjà bien lu avant de poser la question, mais je n'est pas trouvé de solution.
 
 
 
merci de votre aide

Reply

Marsh Posté le 25-08-2005 à 10:47:20    

Il y a toujours 4 fichier à traiter ou le nombre peut varier ?

Reply

Marsh Posté le 25-08-2005 à 12:04:15    

il y aura effectivement 4 fichiers, je pense pas qu'il varie.

Reply

Marsh Posté le 25-08-2005 à 14:09:58    

Alors, si les opérations sur tous les fichiers sont les mêmes, le code sera du style :

Code :
  1. for /f "usebackq delims=" %%x in (`dir /b /s "C:\toto"`) do (
  2.   echo %%x
  3. )


Dans le cas contraire, c'est à l'intérieur de la boucle for qu'il faut vérifier les noms avant de les assigner à des variables ou effectuer les manips correspondantes à chacun.

Reply

Marsh Posté le 25-08-2005 à 15:28:56    

wackevat a écrit :

Alors, si les opérations sur tous les fichiers sont les mêmes, le code sera du style :

Code :
  1. for /f "usebackq delims=" %%x in (`dir /b /s "C:\toto"`) do (
  2.   echo %%x
  3. )


Dans le cas contraire, c'est à l'intérieur de la boucle for qu'il faut vérifier les noms avant de les assigner à des variables ou effectuer les manips correspondantes à chacun.


 
désoler mais je ne suis pas un expert mais la variable x dans le code ci dessus me donne la liste des 4 fichiers, non?

Reply

Marsh Posté le 25-08-2005 à 19:11:57    

Tu as essayé de l'exécuter ?

Reply

Marsh Posté le 26-08-2005 à 09:03:12    

oui bien sure que j'ai essaye. Et l' Echo affiche le nom des 4 fichiers.
 
Sinon es-ce qu'il y a une solution pour récupérer que la premiere ligne.
j'ai trouvé un solution mais il me faut récupérer la première et ensuite je fait un skip de la ligne que je re-extrait dans le fichier texte, je recupère la première ligne (qui correspondra à la 2ème)... ect ...

Reply

Marsh Posté le 26-08-2005 à 09:33:26    

Donc tu l'as essayé mais tu n'as pas lu mes explications :(
 
Bien sûr que ça affiche tous les 4 noms, c'est parce que j'ai fait
echo %%x
pour chaque ligne.
 
echo n'est qu'un exemple d'utilisation. Tu le remplaces par ta/tes commande(s) à toi selon besoin.
 
x ne prend pas le nom de tous les quatre fichiers en sortant de la boucle, mais celui de chacun à chaque fois.
 
Si à la place de  
echo %%x
tu fais
set MA_VAR=%%x
en sortant, tu as MA_VAR=la dernière ligne.
 
Pour récupérer la première ligne seulement, tu sors de la boucle de suite (par un goto vers une étiquette à l'extérieur de la boucle).

Reply

Marsh Posté le 26-08-2005 à 09:33:26   

Reply

Marsh Posté le 26-08-2005 à 09:58:28    

wackevat a écrit :


Pour récupérer la première ligne seulement, tu sors de la boucle de suite (par un goto vers une étiquette à l'extérieur de la boucle).


 
désolé mais là j'ai pas bien compris ce que tu veux dire.  :(  
vraiment désolé...

Reply

Marsh Posté le 26-08-2005 à 10:15:41    

ok, tu fais ça :

Code :
  1. for /f "usebackq delims=" %%x in (`dir /b /s "C:\toto"`) do (
  2.   set LIGNE=%%x
  3.   goto suivant
  4. )
  5. :suivant
  6. echo La premiere ligne est %LIGNE%


Voilà ;)

Reply

Marsh Posté le 26-08-2005 à 10:36:32    

Merci beaucoup  :jap:  et encore merci pour ta patience  :D

Reply

Marsh Posté le 26-08-2005 à 10:59:31    

De rien :)
 
@+

Reply

Marsh Posté le 26-08-2005 à 11:03:09    

si tu es sous windows xp, ne serait-il pas mieux d'utiliser un vbscript ?

Reply

Marsh Posté le 26-08-2005 à 11:47:26    

friday_13 a écrit :

si tu es sous windows xp, ne serait-il pas mieux d'utiliser un vbscript ?


 
Certainement mais j'y connais encore moins, je bidouillle le Batch...
 
Sinon voilà le résultat, c'est un peu brouillon mais ça fonctionne (soyer indulgent)
 

Code :
  1. REM -- Boucle Liste des fichiers --
  2. dir /b/p "%rep%">liste
  3. set nom=liste
  4. for /f %%a in ('find /v /c "" ^< %nom%') do set /a lignes=%%a
  5. del liste
  6. if %lignes%==1 goto 1ligne
  7. if %lignes%==2 goto 2ligne
  8. if %lignes%==3 goto 3ligne
  9. if %lignes%==4 goto 4ligne
  10. if %lignes%==5 goto 5ligne
  11. REM -- 1 seul fichier --
  12. :1ligne
  13. for /f "usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  14. set LIGNE1=%%x
  15. goto suivant)
  16. :suivant
  17. goto choix1
  18. :choix1
  19. echo liste de choix:
  20. echo.
  21. echo 1) Effacer le dossier: %LIGNE1%
  22. echo 2) Ne rien effacer
  23. echo.
  24. :choix
  25. set choix=
  26. set /p choix=" Choix  :  "
  27. if not %choix%=='' set choix=%choix:~0,1%
  28. if %choix%==1 goto ligne1
  29. if %choix%==2 goto debut_copie
  30. echo %choix% n'est pas bon !
  31. goto choix
  32. REM -- 2 fichiers --
  33. :2ligne
  34. for /f "usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  35. set LIGNE1=%%x
  36. goto suivant)
  37. :suivant
  38. for /f "skip=1 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  39. set LIGNE2=%%x
  40. goto suivant1)
  41. :suivant1
  42. goto choix2
  43. :choix2
  44. echo liste de choix:
  45. echo.
  46. echo 1) Effacer le dossier: %LIGNE1%
  47. echo 2) Effacer le dossier: %LIGNE2%
  48. echo 3) Ne rien effacer
  49. echo.
  50. :choix
  51. set choix=
  52. set /p choix=" Choix  :  "
  53. if not %choix%=='' set choix=%choix:~0,1%
  54. if %choix%==1 goto ligne1
  55. if %choix%==2 goto ligne2
  56. if %choix%==3 goto debut_copie
  57. echo %choix% n'est pas bon !
  58. goto choix
  59. REM -- 3 fichiers --
  60. :3ligne
  61. for /f "usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  62. set LIGNE1=%%x
  63. goto suivant)
  64. :suivant
  65. for /f "skip=1 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  66. set LIGNE2=%%x
  67. goto suivant1)
  68. :suivant1
  69. for /f "skip=2 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  70. set LIGNE3=%%x
  71. goto suivant2)
  72. :suivant2
  73. goto choix3
  74. :choix3
  75. echo liste de choix:
  76. echo.
  77. echo 1) Effacer le dossier: %LIGNE1%
  78. echo 2) Effacer le dossier: %LIGNE2%
  79. echo 3) Effacer le dossier: %LIGNE3%
  80. echo 4) Ne rien effacer
  81. echo.
  82. :choix
  83. set choix=
  84. set /p choix=" Choix  :  "
  85. if not %choix%=='' set choix=%choix:~0,1%
  86. if %choix%==1 goto ligne1
  87. if %choix%==2 goto ligne2
  88. if %choix%==3 goto ligne3
  89. if %choix%==4 goto debut_copie
  90. echo %choix% n'est pas bon !
  91. goto choix
  92. REM -- 4 fichiers --
  93. :4ligne
  94. for /f "usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  95. set LIGNE1=%%x
  96. goto suivant)
  97. :suivant
  98. for /f "skip=1 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  99. set LIGNE2=%%x
  100. goto suivant1)
  101. :suivant1
  102. for /f "skip=2 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  103. set LIGNE3=%%x
  104. goto suivant2)
  105. :suivant2
  106. for /f "skip=3 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  107. set LIGNE4=%%x
  108. goto suivant3)
  109. :suivant3
  110. goto choix4
  111. :choix4
  112. echo liste de choix:
  113. echo.
  114. echo 1) Effacer le dossier: %LIGNE1%
  115. echo 2) Effacer le dossier: %LIGNE2%
  116. echo 3) Effacer le dossier: %LIGNE3%
  117. echo 4) Effacer le dossier: %LIGNE4%
  118. echo 5) Ne rien effacer
  119. echo.
  120. :choix
  121. set choix=
  122. set /p choix=" Choix  :  "
  123. if not %choix%=='' set choix=%choix:~0,1%
  124. if %choix%==1 goto ligne1
  125. if %choix%==2 goto ligne2
  126. if %choix%==3 goto ligne3
  127. if %choix%==4 goto ligne4
  128. if %choix%==5 goto debut_copie
  129. echo %choix% n'est pas bon !
  130. goto choix
  131. REM -- 5 fichiers --
  132. :5ligne
  133. for /f "usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  134. set LIGNE1=%%x
  135. goto suivant)
  136. :suivant
  137. for /f "skip=1 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  138. set LIGNE2=%%x
  139. goto suivant1)
  140. :suivant1
  141. for /f "skip=2 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  142. set LIGNE3=%%x
  143. goto suivant2)
  144. :suivant2
  145. for /f "skip=3 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  146. set LIGNE4=%%x
  147. goto suivant3)
  148. :suivant3
  149. for /f "skip=4 usebackq delims=" %%x in (`dir /b /p "%rep%"`) do
  150. set LIGNE4=%%x
  151. goto suivant4)
  152. :suivant4
  153. goto choix5
  154. :choix5
  155. echo liste de choix:
  156. echo.
  157. echo 1) Effacer le dossier: %LIGNE1%
  158. echo 2) Effacer le dossier: %LIGNE2%
  159. echo 3) Effacer le dossier: %LIGNE3%
  160. echo 4) Effacer le dossier: %LIGNE4%
  161. echo 5) Effacer le dossier: %LIGNE5%
  162. echo 6) Ne rien effacer
  163. echo.
  164. :choix
  165. set choix=
  166. set /p choix=" Choix  :  "
  167. if not %choix%=='' set choix=%choix:~0,1%
  168. if %choix%==1 goto ligne1
  169. if %choix%==2 goto ligne2
  170. if %choix%==3 goto ligne3
  171. if %choix%==4 goto ligne4
  172. if %choix%==5 goto ligne5
  173. if %choix%==6 goto debut_copie
  174. echo %choix% n'est pas bon !
  175. goto choix
  176. :ligne1
  177. set dossier_del=%ligne1%
  178. goto efface
  179. :ligne2
  180. set dossier_del=%ligne2%
  181. goto efface
  182. :ligne3
  183. set dossier_del=%ligne3%
  184. goto efface
  185. :ligne4
  186. set dossier_del=%ligne4%
  187. goto efface
  188. :ligne5
  189. set dossier_del=%ligne4%
  190. goto efface
  191. REM -- efface le fichier choisi --
  192. :efface
  193. RD /S /Q "%rep%\%dossier_del%" >nul

Reply

Marsh Posté le 26-08-2005 à 12:04:16    

je vais convertir ca en vbscript  ce WE pour m'amuser si j'ai le temps !

Reply

Marsh Posté le 26-08-2005 à 18:03:35    

@top_rem :
Je vois que tu t'en sors et c'est très bien :)
 
Si tu veux, je peux apporter quelques améliorations à ton script. Pour cela, je voudrais savoir si c'est fait exprès que dans chaque cas, au maximum un seul dossier sera effacé ?
 
Un autre détail : utilise  

dir /b /a:d


pour récupérer que les noms de dossiers et n'utilise pas /p (pour pause).
 
Enfin, ton script ne va fonctionner correctement que quand il y a max=5 dossiers. S'il y en a plus, seul le premier sera pris en compte. Cela parce que si après la ligne 12, aucun cas ne s'applique, le script passe à la ligne 17.
 
Voilà :hello:

Reply

Marsh Posté le 26-08-2005 à 23:23:05    

Pour ce qui est du nombre de dossiers coomme il n'y aura pas plus de 4 en théorie, j'ai fait pour 5 commme ça je suis tranquile.
 
Par contre c'est vrai que j'efface un seul dossier à chaque fois c'est pour ça que je boucle pour pouvoir en effacer un autre si je veux.
 
Ok merci pour la petit correction sur le dir /p c'est vrai que ça sert à rien.
 
En ce qui concerne la problème quant il y a 5, je ne vois pas le problème.
 
Mais j'aimerai améliorer encore... pour que le code soit plus simple  :wahoo:

Reply

Marsh Posté le 27-08-2005 à 09:03:25    

Perso je ferais comme ça, ça marche quelque soit le nombre de dossiers existants :

Code :
  1. @echo off
  2. setlocal enableExtensions
  3. rem d'autres commandes, dont l'initialisation de la variable rep
  4. for /f "usebackq delims=" %%x in (`dir /b /a:d "%rep%"`) do (
  5.   set DOSSIER=%%x
  6.   call :choix
  7. )
  8. rem d'autres commandes ici
  9. rem dont une goto pour sauter le bloc :choix et :debut_copie
  10. :choix
  11. echo.
  12. echo 1) Effacer le dossier %DOSSIER%
  13. echo 2) Ne rien effacer
  14. echo.
  15. set /p choix=Choix :
  16. if not "%choix%"=="" set choix=%choix:~0,1%
  17. if "%choix%"=="1" (
  18.   echo Effacement de %rep%\%DOSSIER%...
  19.   echo rd /s /q "%rep%\%DOSSIER%"
  20. ) else if "%choix%"=="2" (
  21.   echo Aller a debut_copie pour %rep%\%DOSSIER%...
  22.   goto :debut_copie
  23. ) else (
  24.   echo %choix% n'est pas bon !
  25.   goto choix
  26. )
  27. :debut_copie
  28. rem .....
  29. endlocal&&goto :eof


 
Est-ce que ça fait ce que tu demandes ou il y a des points que je n'ai pas compris ?

Reply

Marsh Posté le 28-09-2005 à 17:09:44    

me revoilà,  ;)  
 
J'ai essayer ton code, le truc c'est qui me liste uniquement un dossier, moi je veux faire le choix entre les 3, 4, ou 5... d'un à effacer, donc lister tout les dossiers présent.
 
ex:  
1) dossier1
2) dossier2
3) dossier3
...
 
c'est faire une liste un peux incrementale avec les noms de chacun et un numéros devant que quant je choisi ce numéros j'efface le dossier associer.
 
c'est pour ça que j'utilise pour le moment:
 

Code :
  1. # if %lignes%==1 goto 1ligne
  2. # if %lignes%==2 goto 2ligne
  3. # if %lignes%==3 goto 3ligne
  4. # if %lignes%==4 goto 4ligne
  5. # if %lignes%==5 goto 5ligne

Reply

Marsh Posté le 28-09-2005 à 17:19:43    

Mais de toute façon tu ne vas choisir qu'un dossier à traiter à chaque fois non ?
 
En tout cas, si tu connais d'avance le nombre de fichiers à traiter, ton truc peut te convenir, mais ce n'est pas généralisable et tu as des lignes répétées plusieures fois, ce n'est pas très joli ;)
 
Autrement tu peux compter le nombre de dossier à l'avant pour pouvoir construire ton menu au complet.
 
Mais ce n'est que mon point de vue, bien entendu. Tu choisis ce qui te plaît :jap:
 
@+

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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