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 :

Recherche suivant critère et execution


Sujet :

Scripts/Batch

  1. #1
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut Recherche suivant critère et execution
    Bonjour,

    Je désire réaliser le batch suivant :

    Lire et Recherche dans répertoire le fichier
    Lire fichier et si trouve la chaine Good
    création répertoire Bon (si existe passer)
    copier fichier dans répertoire bon
    effacer dans répertoire origine le fichier origine


    Cordialement


    voici mon 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    :TriFicChaineRep
    rem ****************************************
    rem    Lire repertoire, recupere fichier et si chaine dans
    rem  fichier = Good, copie fichier dans repertoire Bon
    rem  repertoire en dynamique %CD%
    rem ***************************************** 
    setlocal
    set RepLire=C:\liste fichier
    set RepTri=C:\liste fichier\bon
    rem un dir qui donne que le nom du fichier avec extension
    cd\
    rem se place dans répertoire
    CD C:\liste fichier
    rem lecture repertoire
    FOR /F "tokens=*" %%i IN ('dir /O/N/B') DO (
      echo %%i
      pause
      rem recherche chaine Good dans fichier
      for /f "tokens=*" %%z in ('type "%RepLire%"^|findstr /C:"Good"') do (
            rem création répertoire pour copie
            mkdir %RepTri%
            rem copy fichier dans repertoire
                xcopy %%z %RepTri%
            
       )
    
    )
    
    endlocal
    goto :menu

  2. #2
    Membre actif Avatar de Ethan 0x21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 261
    Points
    261
    Par défaut
    Bonjour,

    Je te conseil d'employer plutot je JScript ou le VBScript qui sont plus performant que le batch de cmd.exe, il te suffit juste d'utiliser l'activeX "Scripting.FileSystemObject" pour accéder au systéme de fichier, puis objectivement sa donne :
    Ouvrir le répertoire avec GetFolder, puis parcours des fichiers du dossier avec ReadAll de l'objet StreamObject renvoyé par Scripting.FileSystemObject et recherche dans la chaine du discriminant "Good", si trouvé alors test de l'existence du dossier avec FolderExists, si oui déplacement du fichier avec moveFile, sinon creation du dossier avec createFolder, puis déplacement du fichier.

  3. #3
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Merci pour votre réponse mais je dois le réaliser en Batch.

    cordialement

  4. #4
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    bonsoir

    en me mettant au vb comment fais t'on, y a t-il un debug ou editeur comme powerbatch
    merci de me l'indiquer

  5. #5
    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
    Ethan 0x21,

    Je te défi de faire un code plus court en Vbs ou en Js qu'en bat pour faire ce que Thierry veut.


    JS ou VBS plus performant, pour du traitement sur des fichiers.

    Elle est trop bonne celle là.


    Tu as plusieurs fichiers à tester dans ton repertoire "\lire fichier" ?
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  6. #6
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    Citation Envoyé par sachadee Voir le message
    JS ou VBS plus performant, pour du traitement sur des fichiers.
    Elle est trop bonne celle là.

  7. #7
    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
    Excusez-moi, mais on est sur un Forum d'aide à la programmation en Batch et l'ami "Ethan 0x21" viens dire que le Java Script est plus approprié pour du traitement de fichier.

    C'est pas méchant du tout mais ça m'a vraiment fait rire.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  8. #8
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour tous,

    Désolé je n'ai pas reçu la notification des réponses

    sachadee : Oui dans le répertoire il peux y en avoir plus de 19000 mais de très petite taille, maxi 2K.
    En txt bien sûr.



    Alors si vous pouviez me donner le petit coup de main, j'ai essayé plus forme comme avec trois For ou alors comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set dirbase= monrepertoire
    setlocal enabledelayedexpansion enableextensions
    for /f "delims=" %%a in ('dir %dirbase% /aa /b') do ( 
    
    l'instruction findstr si = à "bon" alors xcopy dans un autre répertoire )
    mais rien cela ne fonctionne pas

    le faite de résoudre le code me permettrais de mieux comprendre le batch.

    merci à vous
    cordialement,

  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,

    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
    
    @echo off
    set $recherche="good"
    set $RepLire=C:\liste fichier
    
    pushd "%$Replire%"&md bon
    
    for %%a in (*.*) do (call :cherche "%%a")
    popd
    goto end
    
    :cherche
    find /C /I %$recherche% %1
    if %errorlevel% equ 0 (move %1 "%$replire%\bon")
    
    :end
    Test ceçi et retourne !

    Amicalement
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  10. #10
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Je le teste
    oui plus de 19000 fichiers de 1K en .txt, ça fais beaucoup

    merci

  11. #11
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour sachadee,

    Le code fonctionne merci , mais si le premier fichier lu, existe dans le répertoire Bon, il sort de la boucle For au lieu de continuer.

    Tu utilises move donc on le déplace, c'est mieux que xcopy tu as raison.

    Cordialement,
    Thierry

  12. #12
    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
    Il te suffit de rajouter un test :

    Si le fichier existe déjà dans \bon on ne fait rien.

    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
    @echo off
    set $recherche="good"
    set $RepLire=C:\liste fichier
    
    pushd "%$Replire%"&md bon
    
    for %%a in (*.*) do (call :cherche "%%a")
    popd
    goto end
    
    :cherche
    find /C /I %$recherche% %1
    if %errorlevel% equ 0 (if not exist "%$replire%\bon"\%1 (move %1 "%$replire%\bon"))
    
    
    :end
    PS : J'ai également corrigé la position du popd, qui n'était pas à sa place
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  13. #13
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Re

    D'accord,
    Je mets cela en place et je te tiens au courant, encore merci
    Je suis de retour vers 18h
    merci sachadee

  14. #14
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    J'ai modifié le code (il me créait un répertoire par nom de sous répertoire
    ex: c:\rep\rep1\bon -> me donnais 3 répertoires
    errorlevel est toujours égal à 1 donc au premier fichier il sort

    J'ai testé les valeurs des variables ,elles sont bonnes sauf le find


    j'ai une valeur en plus que j'ai corrigé avec < dans le find

    Par contre j'utilise PowerBatch sur un 64bits donc impossible de compiler.

    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
    :TriFicChaineRep
    rem *********************************************************
    rem    Lire repertoire, recupere fichier et si chaine dans
    rem  fichier = Good, copie fichier dans repertoire Bon
    rem  repertoire en dynamique %CD%
    rem *********************************************************             8
    
    @echo off
    setlocal
    set $recherche="good"
    set $RepLire=C:\Users\Thierry\
    set $CreatRep=C:\Users\Thierry\bon
    cd %$RepLire%
    pushd "%$Replire%"&md "%$CreatRep%"
    
    for %%a in (*.*) do (call :cherche %%a)
    echo %%a
    pause
    popd
    goto end
    
    :cherche
    echo ************* Recherche chaine good en cours .........
    find /C /I < %$recherche% %1
    pause
    rem teste si fichier existe déplace fichier dans repertoire bon
    if %errorlevel% equ 0 (if not exist %$CreatRep%\%1 (move "%$Replire%\%1" "%$CreatRep%\"))
       echo Termin‚
    
    :end
    endlocal
    goto :menu

    Cordialement,

  15. #15
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Salut,

    J'ai modifié le code, et il me déplace tous les fichiers sans tenir compte du critère, j'avance ..

    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
    :TriFicChaineRep
    rem *********************************************************
    rem    Lire repertoire, recupere fichier et si chaine dans
    rem  fichier = Good, copie fichier dans repertoire Bon
    rem  repertoire en dynamique %CD%
    rem *********************************************************             8
    
    @echo off
    rem Déclaration variables
    setlocal ENABLEDELAYEDEXPANSION
    set $recherche="good"
    set $RepLire=C:\Users\Thierry 
    set $CreatRep=C:\Users\Thierry\bon
    rem cd %$RepLire%
    
    pushd "%$Replire%"&md "%$CreatRep%"
    for %%a in (*.txt) do (call :cherche %%a)
    popd
    goto :end
    
    :cherche
    echo ************* Recherche chaine good en cours .........
    find /C /I %$recherche% %1
    rem teste si fichier existe déplace fichier dans repertoire bon
    if !errorlevel!==0 (
    if not exist "%$CreatRep%\%1" (move "%$Replire%\%1" "%$CreatRep%\%1")
    pause
    )
    
    echo Termin‚
    :end
    endlocal
    goto :menu

  16. #16
    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,

    Tu ne peux pas mettre ceçi dans le ":end"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    :end
    endlocal
    goto :menu
    ça te tue la boucle !!!
    Il ne doit rien y avoir après le :end parce qu'à chaque itération le call va jusqu'au bout du fichier et retourne dans la boucle for. C'est pour ça que ton errorlevel à toujours la même valeur.

    si tu veux mettre d'autres commandes en sortie du "FOR" mets les ici :


    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
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    ...
    pushd "%$Replire%"&md "%$CreatRep%"
    for %%a in (*.txt) do (call :cherche %%a)
    popd
    endlocal
    goto :menu
    ...
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

Discussions similaires

  1. [Problème] Recherche suivant deux critères
    Par zlMyght dans le forum Excel
    Réponses: 2
    Dernier message: 14/01/2015, 13h39
  2. Recherche suivant critères
    Par FabLeBon dans le forum SQL
    Réponses: 8
    Dernier message: 23/05/2012, 16h21
  3. [XL-2007] Recherche suivant critères
    Par chris09300 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/03/2012, 16h21
  4. Réponses: 7
    Dernier message: 02/02/2005, 08h04
  5. Procédure stockée: recherche multi-critères
    Par biroule dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 01/09/2004, 16h02

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