comment récuperer des infos d'un fichier .txt - Shell/Batch - Programmation
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.
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
Marsh Posté le 25-08-2005 à 10:47:20
Il y a toujours 4 fichier à traiter ou le nombre peut varier ?
Marsh Posté le 25-08-2005 à 12:04:15
il y aura effectivement 4 fichiers, je pense pas qu'il varie.
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 :
|
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.
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 :
|
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?
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 ...
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).
Marsh Posté le 26-08-2005 à 09:58:28
wackevat a écrit : |
désolé mais là j'ai pas bien compris ce que tu veux dire.
vraiment désolé...
Marsh Posté le 26-08-2005 à 10:15:41
ok, tu fais ça :
Code :
|
Voilà
Marsh Posté le 26-08-2005 à 11:03:09
si tu es sous windows xp, ne serait-il pas mieux d'utiliser un vbscript ?
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 :
|
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 !
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à
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
Marsh Posté le 27-08-2005 à 09:03:25
Perso je ferais comme ça, ça marche quelque soit le nombre de dossiers existants :
Code :
|
Est-ce que ça fait ce que tu demandes ou il y a des points que je n'ai pas compris ?
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 :
|
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
@+
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