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 :

Recupérer le PID d'un process windows - commande WMIC


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2014
    Messages : 57
    Points : 50
    Points
    50
    Par défaut Recupérer le PID d'un process windows - commande WMIC
    Hello tout le monde,

    J'essaye de récupérer le PID d'un process en utilisant WMIC avec la command suivante:

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SET PID=""
     
    .....
     
    for /f "usebackq tokens=* delims=" %%a in ('WMIC PROCESS WHERE "Commandline like '%COMMAND%'" Get ProcessID) do (
        for /f "tokens=* delims=" %%z in ("%%a") do set "%%z"
    )
     
    SET PID=%ProcessID%

    Quand je teste, le PID est toujours vide. Auriez vous une idée svp?

    Merci à vous,

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Bonjour,

    Je ne vois pas très bien à quoi sert la deuxième boucle FOR, pour moi elle est inutile et incorrecte.
    Tu as oublié une quote après Get ProcessID. Si tu utilises la commande WMIC dans un fichier .bat il faut doubler les % dans la clause WHERE.

    Tu pourrais déjà tester comme cela pour voir si tu récupères bien ce que tu veux :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for /f "delims=" %%a in ('WMIC PROCESS WHERE "Commandline like '%%COMMAND%%'" Get ProcessID^,Name^,Commandline') do echo.%%a
     
    pause

  3. #3
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    @barnabe0057
    Remarque : La sortie de WMIC est unicode
    Le <CR> de fin peut être supprimé en passant la valeur à travers une autre boucle FOR / F.
    Cette boucle For..Do supplémentaire supprimera le caractère <CR> des données WMIC récupérées qui se trouvent dans %%a

    @P3dr075
    https://stackoverflow.com/questions/...active#tab-top

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Salut hackoo, j'ai déjà eu ce problème de sortie Unicode mais je ne suis pas fan de cette solution d'utiliser un deuxième FOR, je préfère faire plus court avec un FINDSTR :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "delims=" %%a in ('WMIC PROCESS WHERE "Commandline like '%%COMMAND%%'" Get ProcessID ^|findstr .') do echo.%%a

    Ou bien encore :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "delims=" %%a in ('WMIC PROCESS WHERE "Commandline like '%%COMMAND%%'" Get ProcessID ^|findstr /v "^$"') do echo.%%a

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Pour ma part je pratique le /value avec find "=" que je trouve mieux (couplé à une astuce pour mon exemple set "%%~a")

    Exemple :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off
    title lastbootuptime
     
    for /f "tokens=*" %%a in ('wmic os get lastbootuptime /value ^| find "="') do set "%%~a"
    echo Dernier demarrage : %lastbootuptime:~6,2%/%lastbootuptime:~4,2%/%lastbootuptime:~,4% %lastbootuptime:~8,2%:%lastbootuptime:~10,2%
     
    pause>nul

  6. #6
    Membre du Club
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2014
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    Hello tout le monde,

    Pas eu le temps de me co ces derniers jours mais un grand merci à tous pour vos réponses qui m'ont été bien utiles et ont résolu mon probleme.

    Une derniere question : J'essaie de récupérer la valeur de %%a dans une variable j'ai donc fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f ..... in (.....) do (set PID=%%a)
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f ..... in (.....) do (echo %%a)
    le souci que j'ai c'est que lorsque je fais

    la variable %PID% est vide. Vous auriez une idée svp ?

    Merci d'avance,

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Salut,
    Je pense que le problème vient des parenthèses, essaie comme ceci :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f ..... in (.....) do set PID=%%a

  8. #8
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut BATCH SELF KILLING en récuperant son PID avec WMIC

    J'ai cru que cette discussion est passée en
    Si vous avez une autre question, alors vous deviez la poster dans un autre Thread
    Voici un bon exemple BATCH SELF KILLING en récuperant son PID avec WMIC
    Code Batch : 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
    CHCP 65001>NUL
    Title BATCH SELF KILLING
    :MAIN
    CLS
    Set "ME=%~0"
    Set "ME=%ME:\=\\%"
    REM Just To show what can be the result
    wmic PROCESS where "CommandLine Like '%%%ME%%%' And Name Like '%%cmd.exe%%'" get ProcessID,Name,CommandLine
    ::----------------------------------------------------------------------------------------------------------------------------------------------
    @for /f "Tokens=2 Delims==" %%a in ('wmic PROCESS where "CommandLine Like '%%%ME%%%' And Name Like '%%cmd.exe%%'" get ProcessID /Value') do ( 
        @for /f "delims=" %%b in ("%%a") do (
            set "MyPID=%%~nb"
        )
    )
    ::----------------------------------------------------------------------------------------------------------------------------------------------
    echo MyPID = "%MyPID%"
    echo Do you want to Kill your Self ? oh No Sorry (-_°) I mean killing the current batch file [Y=YES]
    Set /P "Answer="
    IF /I [%Answer%] EQU [Y] Taskkill /f /pid %MyPID%
    ) Else (
        echo Thanks to God ... We are still alive hhhhh 
        TimeOut /T 3 /Nobreak>nul
        IPconfig /ALL
    )
    pause>nul & GOTO Main

Discussions similaires

  1. [C] pid d'un process lancé avec system(..);
    Par waldoun dans le forum Linux
    Réponses: 5
    Dernier message: 07/05/2007, 18h06
  2. kill d'un process windows
    Par vince2005 dans le forum Langage
    Réponses: 3
    Dernier message: 26/09/2006, 15h47
  3. Recuperer le pid d'un process avec wxwidget
    Par ToMs dans le forum wxWidgets
    Réponses: 16
    Dernier message: 22/07/2006, 08h03
  4. Connaitre PID d'un process lancé avec exec()
    Par hugo123 dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2006, 14h28
  5. Réponses: 4
    Dernier message: 01/07/2003, 15h47

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