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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1183487
top_rem
Posté le 24-08-2005 à 15:40:28  profilanswer
 

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)

mood
Publicité
Posté le 24-08-2005 à 15:40:28  profilanswer
 

n°1183814
wackevat
Posté le 24-08-2005 à 23:25:57  profilanswer
 

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.

n°1183890
top_rem
Posté le 25-08-2005 à 08:57:42  profilanswer
 

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

n°1183986
wackevat
Posté le 25-08-2005 à 10:47:20  profilanswer
 

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

n°1184094
top_rem
Posté le 25-08-2005 à 12:04:15  profilanswer
 

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

n°1184225
wackevat
Posté le 25-08-2005 à 14:09:58  profilanswer
 

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.

n°1184314
top_rem
Posté le 25-08-2005 à 15:28:56  profilanswer
 

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?

n°1184560
wackevat
Posté le 25-08-2005 à 19:11:57  profilanswer
 

Tu as essayé de l'exécuter ?

n°1184807
top_rem
Posté le 26-08-2005 à 09:03:12  profilanswer
 

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 ...

n°1184846
wackevat
Posté le 26-08-2005 à 09:33:26  profilanswer
 

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

mood
Publicité
Posté le 26-08-2005 à 09:33:26  profilanswer
 

n°1184881
top_rem
Posté le 26-08-2005 à 09:58:28  profilanswer
 

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é...

n°1184902
wackevat
Posté le 26-08-2005 à 10:15:41  profilanswer
 

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

n°1184941
top_rem
Posté le 26-08-2005 à 10:36:32  profilanswer
 

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

n°1184964
wackevat
Posté le 26-08-2005 à 10:59:31  profilanswer
 

De rien :)
 
@+

n°1184971
friday_13
sans avatar fixe
Posté le 26-08-2005 à 11:03:09  profilanswer
 

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

n°1185034
top_rem
Posté le 26-08-2005 à 11:47:26  profilanswer
 

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

n°1185085
friday_13
sans avatar fixe
Posté le 26-08-2005 à 12:04:16  profilanswer
 

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

n°1185656
wackevat
Posté le 26-08-2005 à 18:03:35  profilanswer
 

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

n°1185750
top_rem
Posté le 26-08-2005 à 23:23:05  profilanswer
 

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:

n°1185797
wackevat
Posté le 27-08-2005 à 09:03:25  profilanswer
 

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 ?

n°1210067
top_rem
Posté le 28-09-2005 à 17:09:44  profilanswer
 

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

n°1210081
wackevat
Posté le 28-09-2005 à 17:19:43  profilanswer
 

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:
 
@+

mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
problème impossible d'écrire dans un fichier!!!Copier fichier sur ordinateur distant [W2000]
creer un fichier VBS, a partir de bloc notes par exRécupérer le numéro DD d'une machine
Est il possible de savoir quant un fichier mdb est en phase de synchroun fichier de commande sql
[question a 2 euros] Où placer un fichier type login.php ?Stocker un fichier type word
récupérer l'annéegénérer un fichier xml à partir d'un formulaire
Plus de sujets relatifs à : comment récuperer des infos d'un fichier .txt


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