IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Selectionner des valeurs précises dans un fichier texte [Batch]


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Selectionner des valeurs précises dans un fichier texte
    Bonjour à tous!

    Je débute en scripts/batch pour le compte d'un stage et je galère un peu à écrire un script.

    Voilà mon problème. Je dois normaliser un fichier texte contenant des zones de coordonnées géographiques (longitudes et latitudes) correspandants à des couvertures satellite. Le fichier est sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    [FormatInfo]
    format_ver=1
    [GeoMain]
    adm=USA
    sat_name=INTELSAT
    long_nom=64.15
    [COHeader]
    beam_id=Z4
    n_cont=19
    [C1]
    gain=-9.00
    n_point=618
    p1=144.931;19.459
    p2=144.903;19.938
    p3=144.885;20.244
    p4=144.868;20.521
    (...)  /* J'ai coupé il y a 618 lignes*/
    [C2]
    gain=-3.00
    n_point=208
    p1=98.014;-5.885
    p2=98.139;-5.806
    p3=98.290;-5.705
    p4=98.696;-5.389
    (...)
    [C3]
    gain=-2.00
    n_point=73
    p1=138.951;28.343
    p2=144.221;28.826
    p3=144.221;28.833
    p4=144.218;28.864
    (...)
    etc...
    n_cont est le nombre de surfaces différentes (couverture satellite difinie par un ensemble de sommets),gain une valeur à récupérer et n_point le nombre de points par surface.


    Je chercher à mettre en place un script qui respecterait l'algorithme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    echo beam_id;gain;longitude;latitude >> coverage.txt
    * Trouver valeur de 'n_cont='
    * Stocker %n_cont%
    for /L %%i in (1,1,%n_cont%) do (
      * Trouver ligne [C%i]   
      * Trouver valeur de 'gain=' 
      * Trouver valeur de 'n_point=' 
      * Ligne suivante
      for /L %%j in (1,1,%n_point%) do (
          set %i%;%gain%; > coverage.txt  //insérer les valeurs dans le fichier texte
        * décaler curseur après "p%j%="
        * insérer fin de la ligne dans fichier texte ( qui vaut "lon;lat"
        * ligne suivante
      )
    )
    A termes mon but est de générer un fichier texte normalisé en colonnes afin de pouvoir facilement le charger dans une base de données SQL.

    Je cherche donc à parcourir proprement les lignes de mon fichier texte (une par une à partir des p1,p2,p3...) et en extraire des valeurs ou des portions de lignes, ne garder que "138.951;28.343" sur "p1=138.951;28.343" par exemple.

    J'ai vu cette solution qui semble se rapprocher de ce que j'aimerais faire. Mais je vous avoue ne pas avoir assez de bouteille dans ce language pour l'adapter à ma sauce.
    Avis donc à âme charitable pour un petit coup de pouce. Merci!!

  2. #2
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    salut,

    Ton approche n'est pas adaptée, ça va mettre une plombe pour traiter tes fichiers surtout s'ils sont gros.
    Étant donné que la structure de ton fichier modèle semble homogène, il est préférable de faire un traitement "récursif" en une seule passe et que ton script s'adapte en fonction des lignes qu'il rencontre...

  3. #3
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    je concorde avec Minnesota, que je salue au passage. Il vaut mieux que tu parcours ton fichier en une passe et tu sauves les modifications apportées à chaque ligne, si il y en a.

    Envoie le format exact de ton fichier de sortie, pour que l'on puisse te donner un coup de pouce.

    Amicalement

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour minnesota et sachadee, merci pour vos réponses!

    C'est vrai qu'après réflexion ça risque de prendre beaucoup beaucoup de temps si je fais des "aller-retour" dans mon fichier.

    Donc si j'ai bien compris vous me conseillez plutôt de parcourir ligne par ligne mon fichier et mettre dans mon fichier de sortie que ce qu'y m'intèresse.

    J'ai plusieurs intérogations :
    - Est-ce une façon correcte de mettre une condition dans une boucle FOR?
    Est-ce aussi judicieux d'appeler des commandes ou vaut-il mieux mettre directement les instructions pour plus d'efficacité?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for /f  "delims=" %%a in (file.txt) do (
         if condition1 call :command1
         if condition2 call :command2
         if condition3 call :command3
    )
    - Comment ne comparer que le début d'une ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [C1]
    gain=-6.00
    n_point=715
    p1=144.772;22.016
    p2=144.753;22.307
    Par exemple ici, ligne 2, savoir qu'on a "gain" avant le égal et ne sortir que "-6.00".
    J'imagine qu'il faut utiliser un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if "%%a"=="[C"* set id="..." (je ne sais pas comment mettre que C1 ou C2 en fonction)
    for /f "tokens=1 delims==" %%b in (%%a) do (
        if "%%b"=="gain"* set gain="token=2 delims=="
        if  "%%b"=="p"* echo %id%;%gain%;"token=2 delims==" %%a >> sortie.txt
    J'avoue ne pas bien maîtriser les notions token et delims...
    Je ne suis pas sur non plus de mon utilisation du caractère joker *.


    Le but étant de générer un fichier de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    beam_id;gain;longitude;latitude 
    C1;-6.00;144.772;22.016
    C1;-6.00;144.753;22.307
    C1;-6.00;144.734;22.590
    C1;-6.00;144.716;22.839
    C1;-6.00;144.702;23.039
    C1;-6.00;144.676;23.411
    (etc.. jusqu'à la fin de C1)
    C2;-1.00;92.067;66.213
    C2;-1.00;92.197;66.279
    C2;-1.00;92.338;66.348
    (etc.. jusqu'à la fin de C2)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Je ne suis pas encore certain certain de la forme de mes fichiers de sortie. Est-ce que ça serait compliqué de les mettre putôt sour la forme suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    beam_id;gain;poylgon
    C1;-6.00;'POLYGON((144.772 22.016, 144.753 22.307, 144.734 22.590, 144.716 22.839, ...))'
    C2;-1.00;'POLYGON((92.067 66.213, 92.197 66.279, 92.338 66.348, ... ))'
    C3;4.00;'POLYGON((93 66.213, 72.197 61.279, 92.338 66.348, ... ))'
    Je pense que ça sera plus simple pour moi pour générer directement mes polygones dans ma base de donnée. Désolé pour le changement.

  6. #6
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    la première proposition est la plus adaptée pour la programation batch.
    Dans la seconde il faudrait creer une liste par concaténation de variables et si tu as plus de 600 valeurs de longitude et latitude ça va poser des problèmes pour la sauvegarde sur une ligne (limité à 4096 Octets).

    J'ai donc écris ce code qui correspond à ta première idée.
    Tu remarqueras que je n'ai fais que de la comparaison de caractères, cela est suffisant dans ton cas et évite des boucles "FOR" en cascade.

    Ce code traite jusqu'a 999 lignes par beam tu peux l'augmenter si nécessaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    @echo off
    ::::Par SachaDee 05-04-2013
    
    
    ::::TON FICHIER DE DEPART
    set $f_source=tmp.txt
    
    ::::TON FICHIER DE DESTINATION
    
    set $f_destination=coverage.txt
    
    @echo off
    set $switch=1
    set $gain=gain
    set $swtp=1
    set $tp=p
    
    setlocal enabledelayedexpansion enableextensions
    
    for /f %%a in (%$f_source%) do (
                                    set $ligne=%%a
    ::::LE GAIN 
                                    set vgain=!$ligne:~0,4!
    			        if /i !vgain!==%$gain% (set $valg=!$ligne:~5,5!) 
    
    ::::LONGITUDE ET LATITUDE
                                    set tp=!$ligne:~0,1!
    			        if /i !tp!==%$tp% (if !$swtp! leq 999 (set $long=!$ligne:~5,14!)
                                                       if !$swtp! leq 99 (set $long=!$ligne:~4,14!)
                                                       if !$swtp! leq 9 (set $long=!$ligne:~3,14!)
                                                       echo C!$switch!;!$valg!;!$long!                 
    ::::ECRITURE
                                                       echo C!$switch!;!$valg!;!$long!>>%$f_destination%
    ::::ON INCREMENTE LE No DE LIGNE
                                                       set /a $swtp+=1)
    
    
    ::::TRAITEMENT DU BEAM
                                    set val1=!$ligne:~0,2!
                                    set val2=[C
    
                                    if /i !val1!==!val2! (set $num=!$ligne:[C=!
                                    set $num=!$num:]=!
                                    echo !$num!|findstr /r "[^0-9]" > nul
                                    if errorlevel 1 (set $switch=!$num!)
    
    
    ::::ON RESET LE COMPTEUR DE LIGNE
                                                      set $swtp=1))
     
    endlocal
    La rapidité de traitement est excellente (moins de 1 secondes pour 1000 lignes).

    Si tu a besoin d'explication n'hésite pas

    Amicalement

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup Sachadee, c'est vraiment super sympa de m'avoir proposer une solution complète!
    Ça convient niquel à ce que je veux faire. La solution 2 bloque en longueur de ligne en effet...

    Je teste ça lundi au taff (je suis pas sous windows chez moi ) et je te tiens au courant.

    Merci encore et bon week-end!!!

  8. #8
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    salut tout le monde,

    +1 sachadee en guise de rétribution pour le script que tu as fait, cela dit pour info, la limite de la longueur de la ligne de commande est au alentours de 8000 et quelques suivant le système d'exploitation, mais dans le cas suivant t'es pas obligé de concaténer avant écriture, tu peux le faire à la volée directement dans le fichier grâce à la commande set (set /p "=message sans retour à la ligne"<nul>fichier). Autre point, y'a moyen de faire les choses simplement sans que ça devienne un casse-tête, une piste comme ça, tu vois le "gain=-9.00" en ligne 11 du premier message, utilisé comme paramètre*%%a, si tu fais un set %%a qu'est ce que ça donne...

  9. #9
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    autant pour moi, je pensais que la limite était de 4096 octets.
    La technique du "set /p <nul>fichier" fonctionne effectivement mieux que la concaténation. Mais dans le cas présent où l'on ne connais pas le nombre de caractères par ligne que l'on aura au final. C'est à déconseillé.

    Dans le cas du "gain" ta solution est excellente, mais une uniquement pour des éléments statiques qui ne change pas. Innaplicable pour les lignes de longitudes et latitudes qui elles changes à chaque lignes. d'où une simplification vraiment relative entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if /i !vgain!==%$gain% (set $valg=!$ligne:~5,5!)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if /i !vgain!==%$gain% (set %%a)
    Dans ce cas bien évidemment, si l'on connait le nom de la variable dont on récupère la valeur c'est LA solution.

    Merci pour tes éclairements minnesota

    Amicalement

  10. #10
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Citation Envoyé par sachadee Voir le message
    Mais dans le cas présent où l'on ne connais pas le nombre de caractères par ligne que l'on aura au final. C'est à déconseillé.
    C'est dans un fichier, donc s'il est pris en charge par la base de données ça n'a pas d'importance... mais c'est clair que ça ne simplifie pas la "lecture visuel" du fichier... et rien que ça, ça peut justifier la préférence de la première forme.

    Sinon pour la variable gain c'était juste une piste de réflexion pour toi, je ne pensais pas que tu t'en arrêterais là car justement si le "gain" aurait pu être aussi infime, je me serais bien gardé d'en parler mais c'est pas le cas, ici tu peux l'appliquer à tout... par ailleurs, le = et les ; (les : aussi je crois) sont considérés comme des séparateurs d'arguments par l'interpréteur, ça peut considérablement améliorer les choses si tu mets ça à profit... j'ai zappé de te le dire avant, dsl...

    EDIT

    Je remarque que dans l'entête du fichier CSV de sortie, il y a beam_id, or beam_id est une variable qui vaut dans l'exemple Z4, pourtant ce qui est écrit dans le fichier c'est les noms des sections C1, C2... c'est normal ???

  11. #11
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Sinon pour la variable gain c'était juste une piste de réflexion pour toi, je ne pensais pas que tu t'en arrêterais là car justement si le "gain" aurait pu être aussi infime, je me serais bien gardé d'en parler mais c'est pas le cas, ici tu peux l'appliquer à tout... par ailleurs, le = et les ; (les : aussi je crois) sont considérés comme des séparateurs d'arguments par l'interpréteur, ça peut considérablement améliorer les choses si tu mets ça à profit... j'ai zappé de te le dire avant, dsl...
    Non, au contraire tu as bien fait de montrer cette possibilité. Seulement pour l'appliquer au ligne de longitude et latitude ça devient également casse-tête.

    Si tu pouvais donner un exemple pour le traitement de la longitude et latidude avec cette méthode ça serait sympa.

    Pour le beam_id : dans ses exemples slevhin à mis C1,C2,... maintenant à lui de voir.

    Amicalement

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour! Merci pour vos petits commentaires du week-end.

    J'ai un problème à l'éxecution du script... Rien ne se passe quand je tente d'éxecuter mon fichier .bat avec le code exact proposé.
    Il semblerait que le problème vienne de la définition du fichier source. Je l'ai définit sous la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set $f_source=U:\Projets\Localisation\Livrables\906s21.gxt
    Est-ce correcte?


    [EDIT]
    En fait même si je fais un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for %%a in (lundi mardi mercredi) do (echo %%a)
    Il me retourne "%%a était innattendu"..
    J'ai remplacé %%a par %a, ça marche pour la boucle précédente. Mais ça ne résoud pas le problème de l'éxecution du script!..
    Il bloque sur la récupération du gain. Je ne sais pas trop pourquoi mais dans le fichier out, il écrit : C1;!$valg!;-52.1585;70.32
    Il n'écrit d'ailleurs que la dernière ligne du fichier source...
    Images attachées Images attachées  

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Après avoir bataillé pas mal (et fais autre chose un peu aussi^^) ça marche.
    J'avoue ne pas trop comprendre pourquoi...

    J'ai juste :
    - ajouté la ligne : cmd /V:ON pour activer l'expansion retardées (pour utiliser les !$var! si j'ai compris)
    - j'ai supprimé un % dans la variable de la boucle for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f %a in (%$f_source%) do (
    - j'ai mis tous les chemins d'accès sur mon disque C:\ (ça marche pas sur le réseau distant, surement des problèmes de droits)
    - et surtout j'ai supprimé toute indentation. Je comprend pas du tout pourquoi mais ça a été le remède magique...
    Si vous avez une explication je suis preneur.

    Ca donne donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    @echo off
    cmd /V:ON
    ::::Par SachaDee 05-04-2013
    
    ::::TON FICHIER DE DEPART
    set $f_source=C:\Users\gstp1275\Desktop\Test\906s21.gxt
    ::::TON FICHIER DE DESTINATION
    set $f_destination=C:\Users\gstp1275\Desktop\Test\coverage.txt
    @echo off
    set $switch=1
    set $gain=gain
    set $swtp=1
    set $tp=p
    setlocal enabledelayedexpansion enableextensions
    for /f %a in (%$f_source%) do (
    set $ligne=%a
    ::::LE GAIN 
    set vgain=!$ligne:~0,4!
    if /i !vgain!==%$gain% (set $valg=!$ligne:~5,5!) 
    ::::LONGITUDE ET LATITUDE
    set tp=!$ligne:~0,1!
    if /i !tp!==%$tp% (
    if !$swtp! leq 999 (set $long=!$ligne:~5,16!) 
    if !$swtp! leq 99 (set $long=!$ligne:~4,16!) 
    if !$swtp! leq 9 (set $long=!$ligne:~3,16!)
    ::::echo C!$switch!;!$valg!;!$long!
    ::::ECRITURE                 
    echo C!$switch!;!$valg!;!$long!>>%$f_destination%
    ::::ON INCREMENTE LE No DE LIGNE
    set /a $swtp+=1
    )
    ::::TRAITEMENT DU BEAM
    set val1=!$ligne:~0,2!
    set val2=[C
    if /i !val1!==!val2! (
    set $num=!$ligne:[C=!
    set $num=!$num:]=!
    echo !$num!|findstr /r "[^0-9]" > nul
    if errorlevel 1 (set $switch=!$num!)
    ::::ON RESET LE COMPTEUR DE LIGNE
    set $swtp=1)
    )
    C'est plus dense à la lecture quoi...


    Enfin merci beaucoup sachadee pour ce code (et minnesota pour tes remarques aussi). Ca me fera une excellente base de travail pour la suite!!!

    [EDIT]
    Seul problème persistant, je n'arrive toujours pas à éxecuter le fichier .bat en double cliquant dessus. Y a-t-il une manip spéciale à faire?

  14. #14
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    salut,

    J'ai vu ta capture, t'as tenté un copier-coller du script directement sur la console

    Bon sinon je viens de tester le script de sachadee avec comme source ton exemple, ça fonctionne... le cmd /v:on que tu as ajouté ne sert à rien, car tel que écrit, ça ne ferait lancer qu'une autre instance de l'interpréteur qui se fermerait aussitôt... pareil, depuis un script, contrairement à la ligne de commande, un for %a génère une erreur... enfin, pour utiliser un lecteur réseaux, il faut préalablement l'assigner à un volume local avec par exemple la commande "net use" (tape net use /? pour plus d'info)...

    Donc pour utiliser dans des conditions normales le script, il faut ouvrir notepad, coller le texte dedans et enregistré au format ANSI (tout au moins, quand y'a pas d'accents), seulement ensuite tu peux double-cliquer dessus... tu peux aussi ajouter un "pause" à la fin du script...

  15. #15
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Effectivement t'as encore du travail en Batch !
    +1 et Merci à minnesota pour avoir testé mon code et confirmé qu'il fonctionne.

    Je t'ai fais une capture d'écran pour la sauvegarde d'un fichier en ".bat" avec notepad.

    Il te suffit effectivement de faire un copié/collé du code (sans rien modifié) et de faire la sauvegarde en .bat. et cela fonctionnera sur un disque local.

    Amicalement
    Images attachées Images attachées  

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par sachadee Voir le message
    Il te suffit effectivement de faire un copié/collé du code (sans rien modifié) et de faire la sauvegarde en .bat. et cela fonctionnera sur un disque local.
    C'est ce que j'ai fait dès le début. Va savoir pourquoi ça n'a pas marché...
    D'où le test dans la console (très peu conventionnel je l'accorde )

    Citation Envoyé par minnesota Voir le message
    pour utiliser un lecteur réseaux, il faut préalablement l'assigner à un volume local avec par exemple la commande "net use" (tape net use /? pour plus d'info)...
    Merci pour l'info du "net use"!

    Citation Envoyé par sachadee Voir le message
    Effectivement t'as encore du travail en Batch !
    Ca c'est plus que certains!!
    Enfin merci beaucoup pour vos conseils et surtout votre patience, j'apprécie!

    Bonne journée à vous deux!!

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Au passage j'ai une autre petite question.

    J'ai modifié un peu le code pour qu'il boucle sur tous les fichiers de mon répertoire source.
    Ca tourne niquel sauf quand les noms de fichiers contiennent un ou plusieurs espaces... Je sais que dans ce cas là y faut mettre le chemin entre "", mais vu que là les chemins sont trouvés dynamiquement je sais pas trop comment ajouter des "" des 2 côtés.
    J'ai tenté ça, mais bien entendu il s'arrête au premier espace et oubli la suite...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set $r_source=C:\Users\...\Source
    set $list=C:\Users\...\Source\list.txt
    for /f %%i in ('dir /b /s %$r_source%') do (echo "%%i" >> %$list%)
    Est-ce qu'il y a un moyen de palier à ça?

    [EDIT]
    Merci encore une fois sachadee, j'ai trouvé la solution dans un de tes posts ici.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] selectionner des valeurs précises dans un vecteur
    Par nonolt dans le forum MATLAB
    Réponses: 5
    Dernier message: 10/12/2009, 18h52
  2. Attribution des valeurs lues dans un fichier texte
    Par law56100 dans le forum WinDev
    Réponses: 1
    Dernier message: 29/05/2008, 16h07
  3. Réponses: 3
    Dernier message: 04/01/2007, 17h42
  4. Transposer des données sql dans un fichier texte
    Par Anakior dans le forum Outils
    Réponses: 3
    Dernier message: 11/12/2005, 10h01
  5. aller à une position précise dans un fichier texte
    Par bassidi meryeme dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2005, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo