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 :

Interpreter resultats de for /f delims= %%i in


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut Interpreter resultats de for /f delims= %%i in
    Bonjour,


    Je cherche a créer un batch qui me permettrai de modifier un fichier .txt si la variable recherchée est trouvée dans "C:\PGR\ORDRELIV\0123456789.txt".

    Voila ce que j'ai trouvé jusqu'a présent, cependant je n'arrive pas a inclure la suite "si %RECEPX% existe, alors ... sinon ...." aprés for /f "delims=" %%i in ('type "C:\PGR\ORDRELIV\0123456789.txt" ^|findstr /i /r "%RECEPX%"')

    Merci d'avance de vos lumières


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    :NOUVRECEP
    
    echo Entrer nouveau numero de recepice
    set /p RECEPX=:
    for /f "delims=" %%i in ('type "C:\PGR\ORDRELIV\0123456789.txt" ^|findstr /i /r "%RECEPX%"')

  2. #2
    Membre expérimenté Avatar de plopi
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mars 2011
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 191
    Par défaut
    euh je sais pas à quoi ressemble le fichier C:\PGR\ORDRELIV\0123456789.txt mais il sert a quoi le "FOR" exactement (vu qu'il y a pas de "token" et pas de caractère pour le "delims"... si je dis pas de bêtise) ?

    La commande suivante ne suffirait elle pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /i /c:"%RECEPX%" C:\PGR\ORDRELIV\0123456789.txt

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    euh je sais pas à quoi ressemble le fichier C:\PGR\ORDRELIV\0123456789.txt mais il sert a quoi le "FOR" exactement (vu qu'il y a pas de "token" et pas de caractère pour le "delims"... si je dis pas de bêtise) ?

    La commande suivante ne suffirait elle pas ?

    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /i /c:"%RECEPX%" C:\PGR\ORDRELIV\0123456789.txt

    'Soir

    Merci pour ton aide.

    Pour ce qui est du fichier txt
    il se présente sous la forme:

    Ordre de mission n°10004545 (num de reference)
    012547
    1000000 (Ref des récépissés que contient l'ordre de mission)
    48442064115
    45454524
    etc

    Pour la commande FOR euh je l'ai choisie après des recherches sur google, n'ayant pas beaucoup de connaissance en programmation, je tâtonne.

    je vais essayer avec ta ligne, cependant cela ne résolve pas le problème du
    "Si %variable recherchée% existe alors .... sinon ....."

    Et je me permet d'ajouter encore une petite question:
    Est t'il possible d’élargir la recherche de la variable a un dossier qui contient l'ensemble des Ordre de mission (et les num de récépissés dans les différents txt) ?


    Merci encore, je prendrais le temps d'expliquer le déroulement du programme, je suppose que la plupart des conditions ou boucles ne sont pas "optimisées"

    Kro

  4. #4
    Membre expérimenté Avatar de plopi
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mars 2011
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 191
    Par défaut
    Citation Envoyé par Krokrog
    je vais essayer avec ta ligne, cependant cela ne résolve pas le problème du
    "Si %variable recherchée% existe alors .... sinon ....."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    findstr /i /c:"%RECEPX%" C:\PGR\ORDRELIV\0123456789.txt && ( set RECEPX_STATUS=OK ) 
    
    if exist %RECEPX_STATUS% (une commande) else (une autre commande)
    Citation Envoyé par Krokrog
    Et je me permet d'ajouter encore une petite question:
    Est t'il possible d’élargir la recherche de la variable a un dossier qui contient l'ensemble des Ordre de mission (et les num de récépissés dans les différents txt) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dir /b *.txt "dossier qui contient l'ensemble des Ordre de mission" >> liste_ODM.txt
    
    findstr  /i /c:"%RECEPX%" /f:liste_ODM.txt
    Enjoy

    EDIT :

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Hello!

    J'ai testé la ligne dans le batch
    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
    :NOUVRECEP
    
    echo Entrer nouveau numero de recep
    set /p RECEPX=:
    findstr /i /c:"%RECEPX%" C:\PGR\ORDRELIV\0123456789.txt && ( set RECEPX_STATUS=OK )
    
    if exist %RECEPX_STATUS% goto :FIND else goto :NOTFIND
    
    
    :NOTFIND
    echo La ref ne figure pas sur les OdL
    pause
    :FIND
    echo REF trouvee parmi les Ordres de liv
    
    pause
    Cependant le saut au goto FIND ou NOTFIND selon le cas ne se fait pas. J'avoue ne toujours pas comprendre u_u"


    Pour ce qui est de la recherche élargie au dossier le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dir /b *.txt "dossier qui contient l'ensemble des Ordre de mission" >> liste_ODM.txt
    
    findstr  /i /c:"%RECEPX%" /f:liste_ODM.txt
    Copie l'ensemble des txt dans un un nouveau fichier txt, cependant ,j'aurais aimé afficher l'ordre de livraison correspondant si le num de recep est déjà référencé, avec une ligne dans le genre
    Type C:\PGR\ORDRELIV\...

    Du coup avec le "grand" txt je ne vois plus trop comment faire


    Je copierai l'ensemble du code ici demain, je suis conscient que mes attentes sont peut être mal expliqués, j'espère que cela donnera une meilleure vue d'ensemble.

    Merci encore
    KRo

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Bonsoir,

    Mhh il me semble que je ne puisse pas éditer mon premier post, ni le nom du topic, (pour plus de clarter) je vais donc ré expliquer mon projet ci dessous,
    Mais si quelqu'un de la modération préfère que j'ouvre un nouveau topic qu'il me fasse signe !


    Donc, récit de ma palpitante vie pour commencer

    Actuellement étudiant en 1 iere année BTS Transport, j'effectue actuellement un stage en entreprise durant lequel je vais devoir constituer un dossier mémoire qui sera le grand examen oral craint de tous en deuxième année
    Une partie de ce dossier est la résolution ou la mise en oeuvre d'un solution a problème d'exploitation en transport.

    Voila donc pourquoi j'aimerai mettre au point ce batch.
    L'entrprise dans laquelle récupère les ordres de missions des chauffeurs qui contiennent tout les commande attendues.
    Les récépissés de ces commandes arrivent ensuite dans un intervalle assez variable (de 1 à 7jours aprés)
    Les recep sont donc pointés une fois sur papier (en mettant une ptite croix a la ligne correspondante dans l'ordre de mission) puis une nouvelle fois sur informatique dans leur logiciel de gestion.

    Cependant avec tout le personnel différent qui s'en occupe, les retards dans les retours des recep, etc... c'est une belle pagaille, et forcement ...
    C'est au stagiaire de faire le ménage

    Je suis conscient qu'il faudra dans tout les cas faire une seconde saisie 'définitive' sur le programme de transport qu'ils utilisent
    Cependant ce batch a plus pour but de clarifier la situation avant pointage informatique. Cette solution n'est donc pas optimale, mais je pense avoir trouvé une thématique intéressante pour mon dossier mémoire.


    Je reconnais et j'avoue sans honte que mon niveau en batch se situait encore il a un mois à

    Title Bravo
    color 0a
    echo Bonjour!
    pause

    et je ne demande pas a ce que l'ont m'offre le batch sur un plateau d'argent, cela va de soit,

    J'avance pas à pas, je copie colle donc le code que j'ai déjà fait, il y a des goto en chantier avec rien dedans encore c'est normal,





    Pour ce qui est de mes derniers questionnements :

    J'ai testé la ligne dans le batch




    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
    :NOUVRECEP
    
    echo Entrer nouveau numero de recep
    set /p RECEPX=:
    findstr /i /c:"%RECEPX%" C:\PGR\ORDRELIV\0123456789.txt && ( set RECEPX_STATUS=OK )
    
    if exist %RECEPX_STATUS% goto :FIND else goto :NOTFIND
    
    
    :NOTFIND
    echo La ref ne figure pas sur les OdL
    pause
    :FIND
    echo REF trouvee parmi les Ordres de liv
    
    pause
    Cependant le saut au goto FIND ou NOTFIND selon le cas ne se fait pas. J'avoue ne toujours pas comprendre u_u"



    Pour ce qui est de la recherche élargie au dossier le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    dir /b *.txt "dossier qui contient l'ensemble des Ordre de mission" >> liste_ODM.txt
    
    findstr  /i /c:"%RECEPX%" /f:liste_ODM.txt


    Copie l'ensemble des txt dans un un nouveau fichier txt, cependant ,j'aurais aimé afficher l'ordre de livraison correspondant si le num de recep est déjà référencé, avec une ligne dans le genre
    Type C:\PGR\ORDRELIV\...

    Du coup avec le "grand" txt je ne vois plus trop comment faire*




    et enfin le code que j'ai pour l'instant

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    @echo off
    title IGOM V0.1
    echo.
    echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo º Bienvenue dans l'interface de gestion d'ordre de mission  º
    echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    echo.
    echo.
    pause
    
    REM Menu de base
    :BASE
    cls
    echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo º IGOM V0.1  :Menu º
    echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    echo.
    echo.
    echo Nouvel ordre de mission [1]
    echo.
    echo Modifier un ordre de mission [2]
    echo.
    echo Ajouter des recepisses [3]
    echo.
    echo Gerer les recepisses sans ordre de mission [4]
    echo.
    echo Afficher ordres de mission incomplets [5]
    echo.
    echo Afficher ordres de mission complets [6]
    echo.
    echo Archives ordres de mission complets [7]
    echo.
    echo Aide [8]
    echo.
    echo.
    set /p MENU=:
    if "%MENU%"=="1" goto :NODM1
    if "%MENU%"=="2" goto :MODM
    if "%MENU%"=="3" goto :NOUVRECEP
    if "%MENU%"=="4" goto :RECEPINDEP
    if "%MENU%"=="5" goto :LISTINCOMP
    if "%MENU%"=="6" goto :LISTCOMP
    if "%MENU%"=="7" goto :ARCHODM
    if "%MENU%"=="8" goto :AIDE
    
    
    REM Création d'un nouvel ordre de misson qui contient tout les num de recepissé attendus.
    :NODM1
    echo.
    echo Creation d'un nouvel ordre de livraison
    echo.
    echo Entrer reference du BL
    SET /p Ordre=:
    if exist C:\PGOM\ORDREMIS\%Ordre%.txt goto :erreur1
    if not exist C:\PGOM\ORDREMIS\%Ordre%.txt goto :NODM2
    
    
    
    :NODM2
    echo Recepice n°%Ordre% > "C:\PGOM\ORDREMIS\%Ordre%.txt"
    echo Ajoutez les references des recepices,
    echo Taper [FIN] une fois tous les n° de recepices saisit.
    echo.
    echo.
    SET /p R1=:
    echo.
    echo Le recepisse n°%R1% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R1% RECU >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R1% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%R1%"=="fin" goto :BASE else goto :R2
    
    :R2
    cls
    type C:\PGOM\ORDREMIS\%Ordre%.txt
    echo.
    echo %R1% Enregistrement FAIT
    echo.
    echo.
    SET /p R2=:
    echo.
    echo Le recepisse n°%R2% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R2% RECU >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R2% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%R2%"=="fin" goto :BASE else goto :R3
    
    :R3
    cls
    type C:\PGOM\ORDREMIS\%Ordre%.txt
    echo.
    echo %R2% Enregistrement FAIT
    echo.
    echo.
    SET /p R3=:
    echo.
    echo Le recepisse n°%R3% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R3% RECU >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R3% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%R3%"=="fin" goto :BASE else goto :R4
    
    :R4
    cls
    type C:\PGOM\ORDREMIS\%Ordre%.txt
    echo.
    echo %R3% Enregistrement FAIT
    echo.
    echo.
    SET /p R4=:
    echo.
    echo Le recepisse n°%R4% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R4% RECU >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R4% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%R4%"=="fin" goto :BASE else goto :R5
    
    :R5
    cls
    type C:\PGOM\ORDREMIS\%Ordre%.txt
    echo.
    echo %R4% Enregistrement FAIT
    echo.
    echo.
    SET /p R5=:
    echo.
    echo Le recepisse n°%R5% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R5% RECU C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R5% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    goto :BASE
    
    
    
    REM Si l'odre de mission existe déjà l'afficher et proposer de le modifier
    :erreur1
    echo L'ordre de livraison %Ordre% existe deja.
    echo.
    type C:\PGOM\ORDREMIS\%Ordre%.txt
    pause
    
    
    REM Comparaison du n° de recep a tout les ordres de missons (fichiers .txt) dans un dossier
    :NOUVRECEP
    echo Entrer nouveau numero de recep
    set /p RECEPX=:
    findstr /i /c:"%RECEPX%" C:\PGOM\ORDREMIS\0123456789.txt && ( set RECEPX_STATUS=OK )
    
    if exist %RECEPX_STATUS% goto :FIND else goto :NOTFIND
    
    REM n° non trouvé, enregistrer le recep dans le dossier "Recepindependant"
    :NOTFIND
    echo La ref ne figure pas sur les OdL
    pause
    
    REM n° trouvé, modifier l'ordre de mission correspondant en ajoutant 'RECU' sur la ligne correspondant au n° de receo
    :FIND
    echo REF trouvee parmi les Ordres de liv
    pause
    
    REM Modif d'un ordre de misson (ajouter n°recep , supprimer n°recep, modifier nom ...)
    :MODL
    cls
    echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo º IGOM V0.1  :Modifier ordre de mission º
    echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    echo.
    echo.
    echo Entrer le num de recepisse a modifier:
    set /p MODIF=:
    REM si recep trouvé afficher le txt correspondant sinon erreur
    
    
    
    
    :LISTINCOMP
    cls
    echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo º IGOM V0.1  :Afficher ordres de mission non complets º
    echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    echo.
    dir C:\PGOM\ORDREMIS\  /B
    echo.
    pause
    
    
    
    :LISTCOMP
    cls
    echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo º IGOM V0.1  :Afficher ordres de mission complets º
    echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    echo.
    dir C:\PGOM\ORDRECOMPLET\  /B
    
    :ARCHODM
    
    
    :AIDE



    voila voila , si quelqu'un a une question hein,

    Au plaisir de vous lire,

    Kro

  7. #7
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Pour ton if qui ne fonctionne pas, écrit le de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if exist %RECEPX_STATUS% (
        goto :FIND 
    ) else (
        goto :NOTFIND
    )
    Enfin dans tes etiquettes :FIND et :NOTFIND fait attention, la tel que ton code est écrit, à la fin de ton :NOTFIND, le code du :FIND sera exécuté.


    Pour le second problème je n'ai pas compris ce que tu voulais faire.

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Hello,
    merci pour les éclaircissements ,cependant avec ce code

    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
    REM Comparaison du n° de recep a tout les ordres de missons (fichiers .txt) dans un dossier
    :NOUVRECEP
    echo Entrer nouveau numero de recep
    set /p RECEPX=:
    findstr /i /c:"%RECEPX%" C:\PGOM\ORDREMIS\0123456789.txt && ( set RECEPX_STATUS=OK )
    if exist %RECEPX_STATUS% (
        goto :FIND
    ) else (
        goto :NOTFIND
    )
    
    REM n° non trouvé, enregistrer le recep dans le dossier "Recepindependant"
    :NOTFIND
    echo La ref ne figure pas sur les Odm
    pause
    
    REM n° trouvé, modifier l'ordre de mission correspondant en ajoutant 'RECU' sur la ligne correspondant au n° de receo
    :FIND
    echo REF trouvee parmi les Odm
    pause
    Le saut au goto find ne se fait toujours pas, lorsque j'entre par exemple 444
    qui figure sur une des lignes du txt, le batch passe directement au goto notfind.

    fait attention, la tel que ton code est écrit, à la fin de ton :NOTFIND, le code du :FIND sera exécuté.
    Ouep , c'est temporaire le goto find et notfind proposeront ensuite différentes actions possibles, je cherche pour l'instant a "réussir la recherche"




    Pour le second problème je n'ai pas compris ce que tu voulais faire.
    Ce code si j'ai bien compris liste touts les txt du dossiers puis les copie dans un nouveau fichiers txt tous ensemble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dir /b *.txt "dossier qui contient l'ensemble des Ordre de mission" >> liste_ODM.txt
    
    findstr  /i /c:"%RECEPX%" /f:liste_ODM.txt
    Or j'aimerai que les actions possibles par l'utilisateur modifie un ordre de mission "x" dans ce dossier, or avec ce code tout les txt sont regroupés dans un, alors qu'il faudrait qu'ils conservent leur individualité.
    A moins qu'il existe une solution qui me permette ensuite de modifier cette ordre mission "x" après ce code.

    J’espère que j'ai été plus compréhensible

    Merci

    Kro

  9. #9
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Pour le if, j'avais pas regardé le début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if "%RECEPX_STATUS%"=="OK" (
        goto :FIND
    ) else (
        goto :NOTFIND
    )

    La commande exist s'utilise avec les fichiers.
    N'oublie pas de remettre ton RECEPX_STATUS à différent de OK avant ta boucle.


    Pour la suite je n'ai toujours pas bien compris ce que tu cherchais à faire.

    Le code que tu cites, met dans un fichier txt la liste des fichiers à traiter.
    Ensuite on affiche grace à findstr les lignes contenant ton RECEPX parmis tous les fichiers de la liste.


    Explique clairement ce que tu souhaites faire à partir de tes fichiers texte.

    De ce que je comprends, tu as des fichiers textes présent dans un ou plusieurs repertoires. Suite à la saisie de l'utilisateur, tu souhaites trouver le fichier contenant le numero de recep saisi et ensuite modifier le fichier en question.
    C'est bien cela ?

    Déjà si tes fichiers ressemblent effectivement à ce que tu as mis dans un de tes posts précédents, le findstr ne conviendra pas car tu as plein de numéros qui pourront remonter (ex si tu cherche 10, des lignes avec 100, 110, 4105 vont ressortir).


    Donc étape 1 : déterminer de façon exacte comment identifier à coup sur un fichier (ex: numero à tester toujours en 3eme ligne...)
    Apres retrouver ton fichier sera facile, en combinant du FOR et/ou du FINDSTR.
    Ensuite pour modifier ton fichier, explicite ce que tu souhaites modifier, la encore il faut que ce soit précis.

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    'Soir !

    Pour le if, j'avais pas regardé le début :



    if "%RECEPX_STATUS%"=="OK" (
    goto :FIND
    ) else (
    goto :NOTFIND
    )


    La commande exist s'utilise avec les fichiers.
    N'oublie pas de remettre ton RECEPX_STATUS à différent de OK avant ta boucle.
    Désolé de faire autant l'assisté mais je ne comprend pas le "remettre le RECEPX_STATUS a diff de OK, et google n'est pas trés bavard sur l'utilisation du STATUS



    Le code que tu cites, met dans un fichier txt la liste des fichiers à traiter.
    Ensuite on affiche grace à findstr les lignes contenant ton RECEPX parmis tous les fichiers de la liste.


    Explique clairement ce que tu souhaites faire à partir de tes fichiers texte.
    Ok, donc le fichier texte est un ordre de mission qui récapitule l'ensemble des commandes des clients du transporteur, il se présente sous cette forme.

    Ordre de mission n° XXXXXXX
    XXXXXXXXXX
    XXXXXXXXXXXX
    XXXXXXXXXXX
    XXXXXX
    XXXXXXXXXXXX
    XXXXXXXXXXX
    XXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXX


    les lignes suivant le numéro d'ODM sont les références des commandes.
    Une fois les clients livrés, l'entreprise attend le retour des recepissé (qui correspondent a UNE ligne dans l'ODM pour s'assurer que la livraison s'est bien déroulée.

    De ce que je comprends, tu as des fichiers textes présent dans un ou plusieurs repertoires. Suite à la saisie de l'utilisateur, tu souhaites trouver le fichier contenant le numero de recep saisi et ensuite modifier le fichier en question.
    C'est bien cela ?
    Oui c'est exactement cela.
    Admettons que je cherche le récépissé 1000000
    Le but et que l'ODM soit modifié en ajoutant RECU à la ligne correspondant au récépissé recherché.

    ex:

    Ordre de mission n°448107853
    0899996
    0899999
    4565001932
    1000000 RECU
    478519191


    J'utilise actuellement 4 dossier pour ce batch:

    ORDREMIS (ici sont mit en .txt et de manière individuelle tout les ordres de mission dont tout les récépissés ne sont pas encore arrivés en )
    ORDRECOMPLET (ici les ordres de mission ou tous les recep sont arrivés)
    RECEP (ou sont temporairement rangés les recep dont l'ordre de mission n'a pas encore été créé.)
    ARCHIVES (Les ordres de missions plus anciens sont déplacé ici au fur et a mesure pour plus de clarté pour les commandes récentes.

    L'objectif final est que l'ODM dont tout les récépissés sont arrivés (et donc marqués RECU) soit déplacé dans un le dossier ORDRECOMPLET.

    Déjà si tes fichiers ressemblent effectivement à ce que tu as mis dans un de tes posts précédents, le findstr ne conviendra pas car tu as plein de numéros qui pourront remonter (ex si tu cherche 10, des lignes avec 100, 110, 4105 vont ressortir).


    Donc étape 1 : déterminer de façon exacte comment identifier à coup sur un fichier (ex: numero à tester toujours en 3eme ligne...)
    Apres retrouver ton fichier sera facile, en combinant du FOR et/ou du FINDSTR.

    Mh c'est vrai je n'avais pas pensé a ce problème,
    je m'étais au départ tourné vers la fonction For car
    :on peut sauter la première ligne du fichier, qui, dans le txt est "Ordre de miss n°...." et qui n'a donc pas d’intérêt pour la recherche.
    : Et le fait que la recherche d'une variable puisse être délimitée par les espaces , ce qui aurait permis de ne pas "mélanger" les num de deux recep l'un au dessus de l'autre.
    ex:
    je cherche le recep 50658996

    dans la liste

    Ordre de mission n°654250658996 (première erreur évitée)

    5986463486
    4884645065
    8996
    2014 (deuxième erreur évitée)


    Je suis en train de potasser la page de wiki sur FOR , il y a pas mal d'info, mais je ne vois a aucun moment une commande qui me permettrai de chercher une chaine de caractères dans touts les fichiers d'un dossier,
    car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /i /c:"%RECEPX%" C:\PGOM\ORDREMIS\0123456789.txt && ( set RECEPX_STATUS=OK )
    Ne recherche que dans un txt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /i /c:"%RECEPX%" C:\PGOM\ORDREMIS\*.txt && ( set RECEPX_STATUS=OK )
    Un code de ce type est t'il réalisable?



    Merci encore pour ton intérêt et ton aide , je continue a potasser en même temps voir quelles autres alternatives sont possibles !

    Kro

  11. #11
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Citation Envoyé par Krokrog Voir le message
    Désolé de faire autant l'assisté mais je ne comprend pas le "remettre le RECEPX_STATUS a diff de OK, et google n'est pas trés bavard sur l'utilisation du STATUS
    Ce que je voulais dire c'est qu'il faut que tu reinitialises ta variable à un moment donné pour éviter le cas suivant :
    - Test fichier 1 -> NOK
    - Test fichier 2 -> OK, variable à OK
    - Test fichier 3 -> NOK mais variable toujours à OK du fichier précédent ...

    Si tu ne vois pas de quoi je parle, tu t'en apercevras vite en testant normalement


    ...
    pour les explications. C'est plus clair maintenant.

    J'utilise actuellement 4 dossier pour ce batch:

    ORDREMIS (ici sont mit en .txt et de manière individuelle tout les ordres de mission dont tout les récépissés ne sont pas encore arrivés en )
    ORDRECOMPLET (ici les ordres de mission ou tous les recep sont arrivés)
    RECEP (ou sont temporairement rangés les recep dont l'ordre de mission n'a pas encore été créé.)
    ARCHIVES (Les ordres de missions plus anciens sont déplacé ici au fur et a mesure pour plus de clarté pour les commandes récentes.

    L'objectif final est que l'ODM dont tout les récépissés sont arrivés (et donc marqués RECU) soit déplacé dans un le dossier ORDRECOMPLET.
    Donc en fait il n'y a besoin de tester que le repertoire ORDREMIS.



    Et le fait que la recherche d'une variable puisse être délimitée par les espaces , ce qui aurait permis de ne pas "mélanger" les num de deux recep l'un au dessus de l'autre.
    Yep c'est une solution en effet. Attention cependant es-tu sur qu'il y a un espace à chaque fois avant et après. Que ce n'est pas plutot un début et fin de ligne ?
    Dans tous les cas normalement tu peux t'en sortir avec findstr. Et si vraiment c'est pas bon, cf la solution alternative avec sed que je propose en fin de post.



    Donc globalement un exemple de solution.

    - Findstr sur ton repertoire (avec /D normalement, sinon utilise /F après avoir listé tes fichiers), en ajoutant le commutateur /N pour avoir les numéros de lignes.
    - Boucle sur le retour du findstr, pour chaque ligne tu récupères le nom du fichier et le numéro de ligne (utilisation de for avec le bon delims et les tokens idoines)
    - Pour chaque fichier, parcours de ce dernier en comptant les lignes et en le reconstruisant à coté, modification de la ligne, reconstruction de la fin du fichier et remplacement du fichier original par le modifié. Tu auras besoin des expansions retardées de variables pour tes compteurs de lignes (cf ce forum un peu partout)


    Autre solution : utiliser la version windows de la commande unix sed (téléchargeable sur le net) pour modifier directement le fichier.
    Tu peux aussi faire un script perl.

  12. #12
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par Drizzt [Drone38] Voir le message
    Déjà si tes fichiers ressemblent effectivement à ce que tu as mis dans un de tes posts précédents, le findstr ne conviendra pas car tu as plein de numéros qui pourront remonter (ex si tu cherche 10, des lignes avec 100, 110, 4105 vont ressortir).
    Pour éviter cela, il faut faire une recherche sur la base d'une expression régulière.

    Citation Envoyé par Drizzt [Drone38] Voir le message
    Donc étape 1 : déterminer de façon exacte comment identifier à coup sur un fichier (ex: numero à tester toujours en 3eme ligne...)
    Question importante à laquelle il n'a pas répondu. En plus, sur les deux exemples donnés :

    Ordre de mission n°10004545 (num de reference)
    012547
    1000000 (Ref des récépissés que contient l'ordre de mission)
    48442064115
    45454524
    etc
    Ordre de mission n°448107853
    0899996
    0899999
    4565001932
    1000000 RECU
    478519191
    une fois la ligne intéressante en position 3 et dans l'autre en position 5.
    Il faut impérativement trouver une spécificité à ce numéro, car il n'est pas impossible dans l'absolu d'avoir un numéro (de matricule par exemple) correspondant exactement à un numéro de récépissé.

  13. #13
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Hello ,

    Bon je vais essayer de répondre selon l'ordre chronologique des post

    Yep c'est une solution en effet. Attention cependant es-tu sur qu'il y a un espace à chaque fois avant et après. Que ce n'est pas plutôt un début et fin de ligne ?
    Dans tous les cas normalement tu peux t'en sortir avec findstr. Et si vraiment c'est pas bon, cf la solution alternative avec sed que je propose en fin de post.
    Effectivement le num de recep est toujours en début de ligne , je vais donc ajouter un /B au findstr.

    Autre solution : utiliser la version windows de la commande unix sed (téléchargeable sur le net) pour modifier directement le fichier.
    Tu peux aussi faire un script perl.
    Yep, je la garde de coté lorsque que j'arriverai a l'étape de modification du txt , sinon pour le script perl, je m'y tournerai si vraiment c'est sans issue, car le peu de connaissance que j'ai est sous dos et batch miteux



    Pour éviter cela, il faut faire une recherche sur la base d'une expression régulière.
    Hello , j'ai cherché ce qu'était l'expression régulière, je n'ai pas vraiment trouvé d'explication, hormis que c'était impossible avec findstr

    EDIT: j'ai trouvé ça en plus
    "Les expressions rationnelles (mieux connues sous le nom d'expressions régulières, mais c'est un calque de l'anglais "regular expressions") sont un ensemble de métacaractères (autrement dit des caractères dotés d'un sens particulier) grâce auxquels il est possible d'effectuer des recherches complexes dans des chaînes de caractères. Les expressions rationnelles sont très utilisées pour vérifier l'exactitude syntaxique d'une saisie, notamment dans les langages de programmation, où elles permettent également de repérer des structures en vue de les colorer. L'origine et la justification mathématique des expressions rationnelles se situent dans la théorie des automates et des langages formels."

    Mais bon , j'avoue que je pédale toujours autant


    Question importante à laquelle il n'a pas répondu. En plus, sur les deux exemples donnés :
    une fois la ligne intéressante en position 3 et dans l'autre en position 5.
    Il faut impérativement trouver une spécificité à ce numéro, car il n'est pas impossible dans l'absolu d'avoir un numéro (de matricule par exemple) correspondant exactement à un numéro de récépissé.
    mhh ,c'est un malentendu , ce n'était pas voulu qu'il soit en double, ces deux exemples sont distinct.

    Une fois qu'un ordre de mission est créé,
    le numéro des recep ne bougera normalement plus (sauf si l'on supprime l'une des référence de recep, ce qui ne sera plutôt rare. Dans ce cas je peux peu être laisser une ligne vide a la place, plutôt que toutes les références suivantes se décale.
    L'autre modification possible serait de rajouter une nouvelle référence, celle ci serait alors ajouté sur une nouvelle ligne a la suite , ce qui ne perturberait pas l'ordre des autres.


    Si vous voulez d'autres précisions


    Donc euh pour l'instant j'en suis plus ou moins arrivé la :
    et il ne se passe rien lorsque je fais lance la recherche, bien que la fenetre ne se ferme pas.

    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
    REM Comparaison du n° de recep a tout les ordres de missons (fichiers .txt) dans un dossier
    :NOUVRECEP
    set RECEPX_STATUS=NOK
    echo Entrer nouveau numero de recep
    set /p RECEPX=:
    findstr /N /B /D:"%RECEPX%" C:\PGOM\ORDREMIS && (set RECEPX_STATUS=OK )
    if "%RECEPX_STATUS%"=="OK" (
        goto :FIND
    ) else (
        goto :NOTFIND
    )
    
    REM n° non trouvé, enregistrer le recep dans le dossier "Recep"
    :NOTFIND
    echo La ref ne figure pas sur les OdL
    pause
    
    REM n° trouvé, modifier l'ordre de mission correspondant en ajoutant 'RECU' sur la ligne correspondant au n° de recep
    :FIND
    echo REF trouvee parmi les Ordres de liv
    pause

    Merci de votre interêt, je continue a fouiner et tester des trucs !

    Kro

  14. #14
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par Krokrog Voir le message
    Question importante à laquelle il n'a pas répondu. En plus, sur les deux exemples donnés :
    une fois la ligne intéressante en position 3 et dans l'autre en position 5.
    Il faut impérativement trouver une spécificité à ce numéro, car il n'est pas impossible dans l'absolu d'avoir un numéro (de matricule par exemple) correspondant exactement à un numéro de récépissé.
    mhh ,c'est un malentendu , ce n'était pas voulu qu'il soit en double, ces deux exemples sont distinct.
    Ça, on a bien compris. La question c'est comment être sûr qu'en cherchant un numéro de récépissé on ne va pas tomber sur une référence qui n'a rien avoir avec (et faisant croire à tort qu'il s'agit du récépissé recherché) ? En d'autres termes, qu'est ce qu'ils ont de spécifique ces numéros de récépissé ? Comment est généré un fichier d'ordre de mission, qu’elle est sa structure ? Parce que là, on tourne en rond.

  15. #15
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    'Soir ,

    Les numéros de récep n'ont pas de spécificités au niveau de leur construction , ils sont composés des chiffres 0 à 9 d'une longueur généralement comprise entre 5 et et 12 chiffres.

    Le fichier est créé selon le code suivant (qui permet actuellement 5 saisies, mais je vais laisser la possibilité d'en mettre une 30aine par ODM):
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    :NODM2
    echo Recepice n°%Ordre% > "C:\PGOM\ORDREMIS\%Ordre%.txt"
    echo Ajoutez les references des recepices,
    echo Taper [FIN] une fois tous les n° de recepices saisit.
    echo.
    echo.
    SET /p R1=:
    echo.
    echo Le recepisse n°%R1% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R1% RECU >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R1% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%R1%"=="fin" goto :BASE else goto :R2
    
    :R2
    cls
    type C:\PGOM\ORDREMIS\%Ordre%.txt
    echo.
    echo %R1% Enregistrement FAIT
    echo.
    echo.
    SET /p R2=:
    echo.
    echo Le recepisse n°%R2% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R2% RECU >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R2% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%R2%"=="fin" goto :BASE else goto :R3
    
    :R3
    cls
    type C:\PGOM\ORDREMIS\%Ordre%.txt
    echo.
    echo %R2% Enregistrement FAIT
    echo.
    echo.
    SET /p R3=:
    echo.
    echo Le recepisse n°%R3% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R3% RECU >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R3% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%R3%"=="fin" goto :BASE else goto :R4
    
    :R4
    cls
    type C:\PGOM\ORDREMIS\%Ordre%.txt
    echo.
    echo %R3% Enregistrement FAIT
    echo.
    echo.
    SET /p R4=:
    echo.
    echo Le recepisse n°%R4% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R4% RECU >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R4% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%R4%"=="fin" goto :BASE else goto :R5
    
    :R5
    cls
    type C:\PGOM\ORDREMIS\%Ordre%.txt
    echo.
    echo %R4% Enregistrement FAIT
    echo.
    echo.
    SET /p R5=:
    echo.
    echo Le recepisse n°%R5% est t'il deja present ? (o/n)
    SET /p RP=:
    if "%RP%"=="o" echo %R5% RECU C:\PGOM\ORDREMIS\%Ordre%.txt
    if "%RP%"=="n" echo %R5% >> C:\PGOM\ORDREMIS\%Ordre%.txt
    goto :BASE
    Le fichier .txt se présente sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ODM n9848161510
    781561
    33478951324
    33478951222
    055539
    055548

    Il faut compter les ODM complet seront déplacé dans un autre dossier au fur et a mesure, ce qui limite quasiment a 100% le risque de n° de recep identiques. (Les ODM resterons en moyenne 1 semaine avant d'avoir pointé touts les recep)

    En sautant la première ligne de l'odm qui est le numéro d'odm, en recherchant uniquement des chaines situées en début de ligne, ces conditions ne sont elles pas suffisantes pour déterminer les critères de recherche?


    Merci,

    Kro

  16. #16
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par Krokrog Voir le message
    En sautant la première ligne de l'odm qui est le numéro d'odm, en recherchant uniquement des chaines situées en début de ligne, ces conditions ne sont elles pas suffisantes pour déterminer les critères de recherche?
    Si, évidemment. Mais t'aurais pu le dire plutôt que tous les numéros qui suivent la première ligne sont des numéros de récépissé.

    Par contre, je me rappelle plus trop de la discussion là...

  17. #17
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Hello,
    Arf désolé je pensai que c'était clair

    Sinon pour l'instant je suis toujours bloqué sur la ligne de la recherche en elle même:

    Lorsque je lance le batch et qui'il arrive a la commande for, la fenetre reste ouverte mais il ne se passe plus rien , je peux appuyer sur entrée indefiniement.

    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
    REM Comparaison du n° de recep a tout les ordres de missons (fichiers .txt) dans un dossier
    :NOUVRECEP
    set RECEPX_STATUS=NOK
    echo Entrer nouveau numero de recep
    set /p RECEPX=:
    findstr /N /B /D:"%RECEPX%" C:\PGOM\ORDREMIS && (set RECEPX_STATUS=OK )
    if "%RECEPX_STATUS%"=="OK" (
        goto :FIND
    ) else (
        goto :NOTFIND
    )
    
    REM n° non trouvé, enregistrer le recep dans le dossier "Recep"
    :NOTFIND
    echo La ref ne figure pas sur les OdL
    pause
    
    REM n° trouvé, modifier l'ordre de mission correspondant en ajoutant 'RECU' sur la ligne correspondant au n° de recep
    :FIND
    echo REF trouvee parmi les Ordres de liv
    pause

    Merci pour ton aide,

    Kro

  18. #18
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Je crois que c'est un souci du findstr /D.
    J'ai le même comportement dès que j'utilise cette option. Impossible de l'utiliser correctement sur mon poste.

    Du coup si tu ne peux utiliser cette option tu vas devoir lister tes fichiers au préalable et utiliser /F qui fonctionne bien.

  19. #19
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Hello ,
    Ok, du coup ce problème et totalement exterieur à la structure du batch ?

    J'ai réessayé avec /D

    Et le batch m'affiche désormait "impossible de lister les fichiers dans "Le num de recep que je recherche"

    exemple: Impossible de lister les fichiers dans 541100125

    J'ai essayé d'ordonner cela autrement mais cela m'a l'air encore plus faux

    j'en suis donc la :

    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
    REM Comparaison du n° de recep a tout les ordres de missons (fichiers .txt) dans un dossier
    :NOUVRECEP
    set RECEPX_STATUS=NOK
    echo Entrer nouveau numero de recep
    set /p RECEPX=:
    findstr /N /B /F:"%RECEPX%" C:\PGOM\ORDREMIS\ && (set RECEPX_STATUS=OK )
    if "%RECEPX_STATUS%"=="OK" (
        goto :FIND
    ) else (
        goto :NOTFIND
    )
    
    REM n° non trouvé, enregistrer le recep dans le dossier "Recepindependant"
    :NOTFIND
    echo La ref ne figure pas sur les OdL
    pause
    
    REM n° trouvé, modifier l'ordre de mission correspondant en ajoutant 'RECU' sur la ligne correspondant au n° de receo
    :FIND
    echo REF trouvee parmi les Ordres de liv
    pause

  20. #20
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Il ne suffit pas de remplacer /D par /F.
    Relis mon poste, et regarde l'aide de findstr.

    /F attend un fichier contenant la liste des fichiers à chercher.

Discussions similaires

  1. Interpretation du resultat avec confirm()
    Par le-baron dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/02/2008, 00h07
  2. probleme de resultat en sortie de boucle for
    Par afssaLERH dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2007, 16h16
  3. [SQL] tri d'un resultat avec boucle for
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 11/09/2007, 14h30
  4. Réponses: 2
    Dernier message: 28/08/2006, 18h17
  5. Interpretation du resultat de [objet].toString
    Par michaelbob dans le forum Langage
    Réponses: 5
    Dernier message: 21/05/2006, 18h45

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