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 :

Enchaînement de tests sur des extensions [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Par défaut Enchaînement de tests sur des extensions
    Bonjour,

    Je travaille sur un script qui est exécuté via clic droit "Envoyer vers" (raccourci dans le répertoire SendTo). Il travaille donc sur une sélection de fichiers.

    Je dois envoyer des commandes différentes en fonction de l'extension des fichiers et dans le cas précis des PDF, faire une recherche dans le contenu pour savoir quelle commande exécuter.

    La méthode que j'ai imaginée consiste à :
    - compter le nombre d'arguments (fichiers sélectionnés) => variable argC
    - compter le nombre de fichiers qui n'ont pas d'extension PDF => variable eleC
    - compter le nombre de fichier PDF avec un errorlevel à 1 => variable scanC

    La première variable (argC) ne me pose pas de soucis, j'ai bien le nombre total de fichiers sélectionnés. Mais je dois mal imbriquer mes tests derrière, je n'ai rien qui apparaisse ensuite...

    Le code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off
    
    set eleC = 0
    set scanC = 0
    set argC = 0
    for %%x in (%*) do (set /a argC+=1)
    msg %username% %argC%
    for	%%~xI in (*.pdf) do (
    if "%~xI" == "pdf" (findstr /r /i "texte recherché" "%~I") 
    if %errorlevel%==0 (set /a eleC+=1) else (set /a scanC+=1)
    if "%~xI" <> "pdf" (set /a eleC+=1)
    )
    msg %username% %eleC%
    Pour le moment, j'essaye juste de compter et d'afficher le résultat. L'idée au final sera bien entendu de comparer les compteurs pour savoir quelle commande envoyer.

    Merci d'avance pour vos lumières !

  2. #2
    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
    Par défaut
    Salut,

    voilà pour le comptage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    for %%a in (*.*) do (if "%%~xa"==".pdf" set /a #pdf+=1
                           set /a #all+=1)
    
    set #
    En sortie tu as 2 variables :

    %#all% qui contient le nombre de fichier total
    %#pdf% qui contient le nombre de ".Pdf"

    Tu peut naturellement rajouter un test "IF" de la même manière pour compter n'importe quel autre extension.

    J'ai pas compris ce que tu cherches à faire avec l'errorlevel....


  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Par défaut
    Citation Envoyé par sachadee Voir le message
    Salut,

    voilà pour le comptage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    for %%a in (*.*) do (if "%%~xa"==".pdf" set /a #pdf+=1
                           set /a #all+=1)
    En sortie tu as 2 variables :

    %#all% qui contient le nombre de fichier total
    %#pdf% qui contient le nombre de ".Pdf"

    Tu peut naturellement rajouter un test "IF" de la même manière pour compter n'importe quel autre extension.

    J'ai pas compris ce que tu cherches à faire avec l'errorlevel....

    Merci pour ton aide

    Ce que je cherche à faire avec le errorlevel, c'est savoir si findstr a bien trouvé ce que je lui demande de chercher. S'il trouve, j'alimente un compteur, s'il ne trouve pas, un autre.

  4. #4
    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
    Bonjour,

    Il y a effectivement des erreurs dans ta boucle FOR.
    Déjà je ne comprends pas pourquoi tu boucles uniquement sur *.pdf et qu'ensuite tu testes l'extension (qui sera donc forcément pdf ici).

    Sinon en se limitant aux pdf la boucle devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for	 %%I in (*.pdf) do (
    	if "%%~xI" == "pdf" (findstr /r /i "texte recherché" "%%I") 
    	if %errorlevel%==0 (set /a eleC+=1) else (set /a scanC+=1)
    )
    Tu ne dois pas mettre le %%~xI dans le for, ta déclaration de boucle c'est bien uniquement %%IEt ensuite il faut bien doubler les % (car tu es dans un script, en ligne de commande pas la peine).

    Enfin si tu changes ta boucle en *.* pour prendre en compte tous les fichiers, attention comme tu n'as pas d'imbrication sur tes deux premiers if, le if %errorlevel% va être aussi évalué même si tu n'as pas fait de findstr avant ce qui va pourrir tes compteurs.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Par défaut
    Citation Envoyé par Drizzt [Drone38] Voir le message
    Bonjour,

    Il y a effectivement des erreurs dans ta boucle FOR.
    Déjà je ne comprends pas pourquoi tu boucles uniquement sur *.pdf et qu'ensuite tu testes l'extension (qui sera donc forcément pdf ici).

    Sinon en se limitant aux pdf la boucle devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for	 %%I in (*.pdf) do (
    	if "%%~xI" == "pdf" (findstr /r /i "texte recherché" "%%I") 
    	if %errorlevel%==0 (set /a eleC+=1) else (set /a scanC+=1)
    )
    Tu ne dois pas mettre le %%~xI dans le for, ta déclaration de boucle c'est bien uniquement %%IEt ensuite il faut bien doubler les % (car tu es dans un script, en ligne de commande pas la peine).

    Enfin si tu changes ta boucle en *.* pour prendre en compte tous les fichiers, attention comme tu n'as pas d'imbrication sur tes deux premiers if, le if %errorlevel% va être aussi évalué même si tu n'as pas fait de findstr avant ce qui va pourrir tes compteurs.
    Merci pour ces infos !
    Grâce à vous deux, je comprends mieux comment se servir de la variable dans un FOR.

    En synthétisant et adaptant vos codes, j'ai quelque chose qui commence à prendre. Mais comme prévu, mes compteurs me donnent n'importe quoi, puisque mes if ne sont pas imbriqués.

    Quand je fais une boucle dans mon IF, je dois me planter dans les variable, ça m'explose les compteurs.

    Pour l'instant, j'en suis là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    set eleC = 0
    set scanC = 0
    set argC = 0
    
    for %%I in (%*) do (
    set /a argC+=1
    if "%%~xI" == ".pdf" (findstr /r /i "texte recherché" "%%I")
    if %errorlevel%==0 (set /a eleC+=1) else (set /a scanC+=1)
    if "%%~xI" NEQ ".pdf" (set /a eleC+=1)
    echo %argC%
    echo %eleC%
    echo %scanC%
    )

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

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    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 & cls
    
    :::Le string à rechercher
    
    set $cherche="Output"
    
    
    set #1trouv=0
    set #2pastrouv=0
    set #3total=0
    
    for %%a in (*.*) do (if "%%~xa"==".pdf" (echo %%a | find /i %$cherche%>nul && set /a #1trouv+=1 || set /a #2Pastrouv+=1)
                         set /a #3total+=1)
    set #
    
    pause

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Par défaut
    Merci ! Je vais tester ça de suite !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Par défaut Solution !
    Avec votre aide, voici le code auquel j'arrive (et qui fait ce que je souhaitais) :
    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
    @echo off & cls
    
    set $cherche="Chaine recherchee"
    
    set #trouve=0
    set #pastrouve=0
    set #selectionFichier=0
    
    for %%a in (%*) do (if "%%~xa" NEQ ".pdf" set /a #trouve+=1)
    for %%a in (%*) do (if "%%~xa"==".pdf" (echo %%a | findstr /r /i %$cherche% %%a>nul && set /a #trouve+=1 || set /a #pastrouve+=1)
                         set /a #selectionFichier+=1)
    set #
    
    ::Commandes de test
    if %#selectionFichier% == %#pastrouve% ( echo commande scan )
    if %#selectionFichier% == %#trouve% ( echo commande autre )
    if not %#pastrouve% == 0 if not %#trouve% == 0 ( msg %username% Message d erreur.)
    Une question encore, cependant : à quoi sert le ? Si je le désactive, ça n'a pas d'impact sur le résultat de mes tests !

    Merci à vous !

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

Discussions similaires

  1. Test sur des extension de fichiers
    Par arnaud036 dans le forum Linux
    Réponses: 1
    Dernier message: 05/05/2010, 20h36
  2. test sur des extensions de fichiers script CSH
    Par Ferzed dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 16/06/2009, 10h58
  3. Problèmes Test sur des dates
    Par guigui11 dans le forum ASP
    Réponses: 1
    Dernier message: 11/12/2006, 16h18
  4. Test sur des records
    Par Tchaill39 dans le forum Delphi
    Réponses: 3
    Dernier message: 18/09/2006, 15h51
  5. [JUnit] Les tests sur des interfaces graphiques
    Par adilo dans le forum Tests et Performance
    Réponses: 5
    Dernier message: 01/02/2006, 14h27

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