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

Windows Discussion :

recherche et déplacement de fichiers dans une arbor


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut [Résolu] recherche et déplacement de fichiers dans une arbor
    Bonjour tout le monde,

    J'ai un petit programme à réaliser pour le boulot, c'est assez urgent puisqu'il le faudrait fonctionnel demain matin ! Il s'agit de trouver tout les fichiers *.scp des répertoires ...\screening\ et ...\D-2\ d'une arborescence à trois niveaux. Puis de les déplacer dans un répertoire "\screeningD-2\" à la racine de l'arborescence en question ("C:\progtri\OP476E~1\" dans cet exemple).

    J'ai cherché les lignes de commandes que je pourrais réunir dans un script :

    J'arrive à réunir dans un fichier texte tout les répertoires à déplacer grace à cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DIR /A:d /O:G /S /B screening D-2 > rep.txt
    J'obtiend alors un résultat ressemblant à celui-ci listant tous les répertoires Screening et D-2 présent dans les nobreux sous-répertoires de l'arborescence :

    Citation Envoyé par rep.txt
    C:\progtri\OP476E~1\BULMA\D-2
    C:\progtri\OP476E~1\BULMA\SCREENING
    C:\progtri\OP476E~1\GERXA\D-2
    C:\progtri\OP476E~1\GERXA\SCREENING
    C:\progtri\OP476E~1\GIOMA\D-2
    C:\progtri\OP476E~1\GIOMA\SCREENING
    C:\progtri\OP476E~1\LAQME\D-2
    C:\progtri\OP476E~1\LAQME\SCREENING
    C:\progtri\OP476E~1\RICCL\D-2
    C:\progtri\OP476E~1\RICCL\SCREENING

    Après deux bonnes heures d'essais en tout genres, je n'arrive pas à aller plus loin avec les lignes de commande. Je pense que ce n'est pas possible de faire un script.
    Je me demandais si quelqu'un pouvais m'aider à réaliser ce programme en C# ou si vous aviez un exemple similaire duquel je pourrais m'inspirer.
    J'ai choisis le C++ parceque je dispose de DevC++ 4 au boulot et que j'ai eu des notions de prog en C.

    J'en profite pour préciser que la dernière fois que j'ai touché à un langage de programmation c'était un petit programme de m**** en C il y a plus de 4 ans (en TP d'IUT)...
    A part cela j'ai quand même de solides bases en algorithmie,...

    D'avance merci pour votre précieuse aide !

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Mauvais outils.
    Si tu peux t'installer les outils du monde unix (cygwin, mingw, etautres ports), ton problème se règle avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /rep/où/chercher -name "*.scp" -exec mv \{} /rep/où/déplacer \;
    Le C++ ne me parait pas super adapté à cela. D'autant qu'au final tout ce que tu pourras faire, c'est utiliser l'API win32 pour réaliser tes opérations -- peut-etre un moyen avec boost en surcouche portable.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    J'oubliais de préciser un truc :

    Cet exemple n'est qu'un exemple simplifié, dans la réalité cette arborescence compte quelques centaines de répertoires, et tout ça change progressivement toute la semaine... Il s'agit en fait d'une arborescence utilisée par un workflow.

    D'où la nécessité de faire un programme qui va chercher lui même ce qu'il y a à déplacer et qui se charge de tout... Histoire de le lancer toutes les semaines afin de faire le tri régulièrement !

    Je dis ça parce que la plupart de mes amis à qui j'ai demandé de l'aide me sortent des exemples de script de sauvegarde bateaux,...
    Vous vous doutez bien que si c'était une arborescence fixe, ça ne me poserait pas de problèmes !

    Dernière chose :

    Cette arborescence est située sur le serveur et sera donc de la forme
    De plus ce programme devra tourner sur trois postes différents et donc plusieurs OS : Windows 98 SE et Windows XP pro (sp2 ou 1)

  4. #4
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Luc Hermitte
    Mauvais outils.
    Si tu peux t'installer les outils du monde unix (cygwin, mingw, etautres ports), ton problème se règle avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /rep/où/chercher -name "*.scp" -exec mv \{} /rep/où/déplacer \;
    Le C++ ne me parait pas super adapté à cela. D'autant qu'au final tout ce que tu pourras faire, c'est utiliser l'API win32 pour réaliser tes opérations -- peut-etre un moyen avec boost en surcouche portable.
    Merci de ta réponse.
    Mais dans la ligne de code que tu me propose il faut connaitre les rep où chercher !!
    Tout ce que j'arrive à faire c'est de recencer ces derniers dans un fichier texte grâce aux lignes de commande windows XP.

    Et je travail exclusivement sous environnement microsoft au boulot. Donc pas de possibilité de faire avec des commande unix

    Si le C# ne te parait pas adapté et que je ne dispose pas d'outils unix, que me conseilleriez-vous ?

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut, essai ceci
    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
    @echo OFF
    
    Set Domain=Dom_Test
    Set MyDir=C:\TEMP
    set ROOT=C:\
    
    Set Rep_File=%MyDir%\Repertoire.txt
    
    Set Fichier_File=%MyDir%\Fichier.txt
    
     rem affiche tous les répertoires et sous-répertoires au format abrégé
     rem si le répertoire de recherche ne contient ni fichier ni répertoire, %Rep_File% sera vide.
    Del %Rep_File%
    
    For /F "Tokens=*" %%I in ('Dir %ROOT%/AD /b /S') Do Echo "%%I">>%Rep_File%
    
     rem affiche tous les fichiers de tous les sous-répertoires au format abrégé, ( sans les répertoires)
    Del %Fichier_File% 
    
    For /F "Tokens=*" %%I in ('Dir %ROOT% /A-D /b /S') Do Echo "%%~dpI";"%%~nxI">>%Fichier_File%
    Une fois la liste des fichiers constituée tu peux utiliser une 3 eme boucle pour les copier.
    Ne fonctionne que sur NT et supérieure
    Sous W98 cela est un peu plus ardue, les possibilités sont restreintes.

    Sinon regarde du coté de WSH, nécessite une installation sur W98, NT et W2K. Intégré sous XP.

    Il existe pas mal de sites ou tu trouveras des exemple de scripts de ce type.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    Hehe, je savais bien que Laurent ne mettrais pas longtemps à pondre un truc

  7. #7
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Je suis partis de l'exemple de Laurent, j'ai étudié un peu ces boucle FOR et j'ai pondu un script qui marche super bien (je l'ai testé dans tout les sens )

    Le seul truc que je ne comprend pas, c'est l'histoire des jetons :
    Quelqu'un pourrait m'expliquer ?

    Sinon voici le script :
    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
    @echo OFF
    
    Set MyDir=C:\progtri\TEMP
    set ROOT=c:\progtri\
    
    Set Rep_File=%MyDir%\Repertoire.txt
    
    Set Fichier_File=%MyDir%\Fichier.txt
    
    Del %Rep_File%
    
    cd %ROOT%\%1
    
    For /F "Tokens=*" %%I in ('Dir /A:d /O:G /S /B screening D-2') Do Echo "%%I\*.scp" >>%Rep_File%
    
    REM Fichier repertoire.txt mis a jour.
    
    For /F "Tokens=*" %%I in (%Rep_File%) Do MOVE %%I "%ROOT%\%1\%1 END\screening D-2\" 
    
    REM Fichiers Screening et D-2 deplaces !
    
    For /F "Tokens=*" %%I in ('Dir /A:d /O:G /S /B screening D-2') Do RD "%%I"
    
    REM Repertoires Screening et D-2 supprimes !
    
    exit
    Bon il me reste juste à gérer la gestion des erreurs et les messages d'erreurs (traduits et interprétés) destinés à l'utilisateur (ou devrais-je dire l'utilisatrice ?).
    Grace à des GOTO + balises et en récupérant l'état des commandes achevées dans les variables d'environnement.

    Je vous enverrais la version finale... Mais pas avant lundi

    D'ici là : bon week-end 8) et merci beaucoup

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Juste pour précisions (vu qu'une autre solution est adoptée):
    - find en version compilée pour windows est librement récupérable, de même que les autres outils de la même veine (je m'en sers d'aileurs régulièrement)
    - peut importe comment est défini le chemin où chercher. Si tu es capable de l'exprimer à un moment où un autre, tu es capable de le donner à find -- en définissant un script plus complexe s'il le faut. Peut-etre aurais-dû préciser qu'il était récursif et que c'est pour cela que l'on se contente de donner la racine des répertoires où chercher ?
    - un chemin est un chemin, qu'il soit local ou sur une autre machine (UNC je crois que l'on dit).
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    UNC c'est une convention de nommage qui permet de qualifier l'emplacement d'un fichier sur un réseau.
    http://msdn.microsoft.com/library/en-us/off2000/html/defUNC.asp

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fend
    Le seul truc que je ne comprend pas, c'est l'histoire des jetons :
    Quelqu'un pourrait m'expliquer ?
    Les fichiers peuvent contenir des espaces il est donc préférable d'expliciter que c'est la totalité de la ligne renvoyée par une commande qui est asssignée à la variable de boucle.
    Pour la gestion des erreurs il est peut préférable de scinder chaque opération dans un sous-programme interne qui faciliteras la relecture de l'ensemble.

  11. #11
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Merci pour l'info.

    Quand à la gestion des erreurs je penses que je vais tout faire dans ce script car je ne vois pas trop comment scinder un script en plusieurs sous-programme avec un script principal !

    Et puis de toutes façons il ne sera pas bien difficille à relire.

    8)

  12. #12
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Chose promise, chose due. Voici le programme terminé avec prise en charge des erreurs et du réseau pour l'exécuter des postes clients. + correction de petits bugs imprévus...

    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
    @echo OFF
    
    net use t: \\serveur\cardionics
    
    Set MyDir=t:\TEMP
    set ROOT=t:
    
    Set Rep_File=%MyDir%\Repertoire.dat
    
    If "%1"=="" (
       GOTO :param
    ) ELSE (
       If not exist %ROOT%\%1\nul GOTO :etude
    )
    
    If exist %Rep_File% Del %Rep_File%
    
    If not exist "%ROOT%\%1\%1 END\screening D-2\nul" MD "%ROOT%\%1\%1 END\screening D-2\"
    
    cd %ROOT%\%1
    
    Dir /A:d /O:G /S /B screening D-2
    If %errorlevel% == 1 (
         cls
         echo.
         echo.
         echo. Aucun répertoire Screening ou D-2 trouvé.
         echo.
         echo. Soit les Screening et D-2 ont déjà été déplacés,
         echo. soit les ECG n'ont pas encore été triés.
         echo. Dans ce cas, exécutez le programme triscp.exe.
         echo.
         echo.
         pause
         exit
    )
    
    For /F "Tokens=*" %%I in ('Dir /A:d /O:G /S /B screening D-2') Do Echo "%%I\*.scp" >>%Rep_File%
    
    Echo.
    Echo.Liste des répertoires "Screening" et "D-2" mise à jour.
    Echo.
    
    For /F "Tokens=*" %%I in (%Rep_File%) Do MOVE %%I "%ROOT%\%1\%1 END\screening D-2\" 
    
    Echo.
    Echo.Fichiers Screening et D-2 deplacés.
    Echo.
    
    For /F "Tokens=*" %%I in ('Dir /A:d /O:G /S /B screening D-2') Do RD "%%I"
    
    Echo.
    Echo.Repertoires Screening et D-2 supprimés.
    Echo.
    
    :end
    cls
    echo.
    echo.
    echo. Le programme s'est déroulé correctement.
    echo.
    echo. Tout les ECG Screening et D-2 ont été déplacé dans :
    echo.  %ROOT%\%1\%1 END\screening D-2\
    echo.
    echo.
    pause
    exit
    
    :param
    cls
    echo.
    echo.
    echo. Paramètre manquant ou incorrect !
    echo. Veuillez spécifier le nom de l'étude en paramètre.
    echo.
    echo.
    pause
    exit
    
    :etude
    cls
    echo.
    echo.
    echo. L'étude %1 n'existe pas.
    echo.
    echo.
    pause
    exit

  13. #13
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Juste une petite remarque, l'utilisation d'exit empêche l'enchainement de batchs et le net use peut échouer.

  14. #14
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    pfff... C'est du chipotage là !
    Enfin tu as raison, autant que ce soit bien propre. C'est un peu long mais je n'avais pas envie de me prendre la tête !

    Voilà :

    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
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    @echo OFF
    
    :testt
    net use t:
    if %errorlevel% == 0 GOTO :testi
        net use t: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=t:\TEMP
        set ROOT=t:
        GOTO :BEGIN
    
    :testi
    net use i:
    if %errorlevel% == 0 GOTO :testj
        net use i: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=i:\TEMP
        set ROOT=i:
        GOTO :BEGIN
    
    :testj
    net use j:
    if %errorlevel% == 0 GOTO :testk
        net use j: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=j:\TEMP
        set ROOT=j:
        GOTO :BEGIN
    
    :testk
    net use k:
    if %errorlevel% == 0 GOTO :testl
        net use k: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=k:\TEMP
        set ROOT=k:
        GOTO :BEGIN
    
    :testl
    net use l:
    if %errorlevel% == 0 GOTO :testm
        net use l: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=l:\TEMP
        set ROOT=l:
        GOTO :BEGIN
    
    :testm
    net use m:
    if %errorlevel% == 0 GOTO :testn
        net use m: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=m:\TEMP
        set ROOT=m:
        GOTO :BEGIN
    
    :testn
    net use n:
    if %errorlevel% == 0 GOTO :testo
        net use n: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=n:\TEMP
        set ROOT=n:
        GOTO :BEGIN
    
    :testo
    net use o:
    if %errorlevel% == 0 GOTO :testp
        net use o: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=o:\TEMP
        set ROOT=o:
        GOTO :BEGIN
    
    :testp
    net use p:
    if %errorlevel% == 0 GOTO :testq
        net use p: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=p:\TEMP
        set ROOT=p:
        GOTO :BEGIN
    
    :testq
    net use q:
    if %errorlevel% == 0 GOTO :testr
        net use q: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=q:\TEMP
        set ROOT=q:
        GOTO :BEGIN
    
    :testr
    net use r:
    if %errorlevel% == 0 GOTO :testv
        net use r: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=r:\TEMP
        set ROOT=r:
        GOTO :BEGIN
    
    :testv
    net use v:
    if %errorlevel% == 0 GOTO :periph
        net use v: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=v:\TEMP
        set ROOT=v:
        GOTO :BEGIN
    
    :periph
    cls
    echo.
    echo.
    echo. ERREUR !
    echo. Aucun périphérique disponible.
    echo.
    echo.
    pause
    GOTO :end
    
    :nores
    cls
    echo.
    echo.
    echo. ERREUR !
    echo. Ressource réseau indisponible,
    echo. vérifiez que vous êtes bien connecté.
    echo.
    echo.
    pause
    GOTO :end
    
    :BEGIN
    
    Set Rep_File=%MyDir%\Repertoire.dat
    
    If "%1"=="" (
       GOTO :param
    ) ELSE (
       If not exist %ROOT%\%1\nul GOTO :etude
    )
    
    If exist %Rep_File% Del %Rep_File%
    
    If not exist "%ROOT%\%1\%1 END\screening D-2\nul" MD "%ROOT%\%1\%1 END\screening D-2\"
    
    %ROOT%
    cd %ROOT%\%1
    
    Dir /A:d /O:G /S /B screening D-2
    If %errorlevel% == 1 (
         cls
         echo.
         echo.
         echo. Aucun répertoire Screening ou D-2 trouvé.
         echo.
         echo. Soit les Screening et D-2 ont déjà été déplacés,
         echo. soit les ECG n'ont pas encore été triés.
         echo. Dans ce cas, exécutez le programme triscp.exe.
         echo.
         echo.
         pause
         GOTO :end
    )
    
    For /F "Tokens=*" %%I in ('Dir /A:d /O:G /S /B screening D-2') Do Echo "%%I\*.scp" >>%Rep_File%
    
    Echo.
    Echo.Liste des répertoires "Screening" et "D-2" mise à jour.
    Echo.
    
    For /F "Tokens=*" %%I in (%Rep_File%) Do MOVE %%I "%ROOT%\%1\%1 END\screening D-2\" 
    
    Echo.
    Echo.Fichiers Screening et D-2 deplacés.
    Echo.
    
    For /F "Tokens=*" %%I in ('Dir /A:d /O:G /S /B screening D-2') Do RD "%%I"
    
    Echo.
    Echo.Repertoires Screening et D-2 supprimés.
    Echo.
    
    :end
    cls
    echo.
    echo.
    echo. Le programme s'est déroulé correctement.
    echo.
    echo. Tout les ECG Screening et D-2 ont été déplacé dans :
    echo.  %ROOT%\%1\%1 END\screening D-2\
    echo.
    echo.
    pause
    GOTO :end
    
    :param
    cls
    echo.
    echo.
    echo. Paramètre manquant ou incorrect !
    echo. Veuillez spécifier le nom de l'étude en paramètre.
    echo.
    echo.
    pause
    GOTO :end
    
    :etude
    cls
    echo.
    echo.
    echo. L'étude %1 n'existe pas.
    echo.
    echo.
    pause
    GOTO :end
    
    :end
    net use %ROOT% /delete
    Merci pour votre aide

  15. #15
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Avant je faisait ça pour tester et assigner une lettre au répertoire partagé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    :testi
    net use i:
    if %errorlevel% == 0 (
        GOTO :testj
    ) ELSE (
        net use i: \\serveur\cardionics
        if %errorlevel% == 2 GOTO :nores
        set MyDir=i:\TEMP
        set ROOT=i:
        GOTO :BEGIN
    )
    mais je me suis rendu compte que le ERRORLEVEL ne changeait pas dans une boucle if, du coup même lorsque le net use fonctionnait il affichait le message d'erreur ":nores" ... Curieux.

  16. #16
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Tu peux factoriser les tests sur les noms de lecteur ( en utilisant une boucle par exemple) car la syntaxe suivante reste possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GOTO :test%NomUnite%
    A+

  17. #17
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    ou comment se compliquer la vie !!

    Je te remercie.

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

Discussions similaires

  1. Rechercher un fichier dans une library via un HTML Form WebPart
    Par Gwyom dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 17/04/2013, 09h35
  2. Recherche d'un fichier dans une fenetre hta
    Par 1MrchB dans le forum VBScript
    Réponses: 4
    Dernier message: 11/05/2012, 08h45
  3. Rechercher un fichier dans une arborescence
    Par kali38 dans le forum Général Python
    Réponses: 11
    Dernier message: 31/03/2011, 09h42
  4. Find et Recherche de fichier dans une arborescence
    Par Lolitaaa dans le forum Unix
    Réponses: 1
    Dernier message: 04/03/2011, 12h51
  5. [BATCH] DOS, déplacement de fichier dans une boucle FOR
    Par nicoga dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 14/11/2008, 14h36

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