im essayant de trouver un moyen d'obtenir mon propre PID à partir d'une invite de commande (pour une utilisation ultérieure dans les scripts de chauve-souris) jusqu'à présent, le seul moyen utile que j'ai trouvé était d'utiliser getpids.exe à partir d'ici: http://www.scheibli.com/ projects / getpids / index.html mais je cherche une commande "intégrée" à Windows
edit: je cherche un moyen "à l'épreuve des balles" - aucune hypothèse sur mon processus étant le seul cmd.exe ou quoi que ce soit
microseconds
, plutôt que 1/100 secondes comme en% time%), serait plus fiable dans ce cas:wmic os get LocalDateTime
(YearMonthDayHourMinuteSecond.Microsecond + Timezone). A moins que l'ordonnanceur soit capable d'exécuter deux choses exactement dans la même microseconde ...Je crois que ce qui suit est à l'épreuve des balles, à condition que l'utilisateur ait accès aux points WMIC et TEMP vers un chemin valide où l'utilisateur a des privilèges d'écriture. Il s'agit du résultat final d'un travail collaboratif sur http://www.dostips.com/forum/viewtopic.php?f=3&t=6133 .
Le script établit un verrou exclusif sur un fichier temporaire qui incorpore l'heure actuelle dans le nom. Il ne peut y avoir collision que si deux processus par lots nommés similaires tentent d'obtenir le PID dans le même intervalle de temps de 0,01 seconde, auquel cas un seul réussira.
Tout processus qui échoue sera répété en boucle et réessayera avec un nouveau chemin de fichier de verrouillage jusqu'à ce qu'il réussisse.
Le chemin d'accès complet au fichier de verrouillage est transformé en un ID unique qui peut être utilisé dans la requête WMIC. WMIC est exécuté dans une commande FOR / F, ce qui signifie qu'il s'exécute dans un processus enfant cmd.exe. C'est pourquoi le ParentProcessID du processus cmd.exe est récupéré.
la source
Développant la réponse de Tony Roth:
L'utilisation du filtre WINDOWTITLE évite le tuyau, vous pouvez donc le placer dans une boucle for et l'affecter à une variable avec SET si vous le souhaitez:
La suppression de la
/v
rend plus rapide et la/NH
supprime la ligne d'en-tête. Vous avez besoin du caractère générique après"uniqueTitle"
parce que le titre de la fenêtre contient en fait la commande actuelle (ainsi il continuerait si vous essayiez de le faire correspondre complètement).la source
Utilisation de PowerShell + WMI:
la source
pwsh -noprofile -c "(Get-Process -Id $PID).Parent.Id"
la source
si vous savez qu'il n'y a qu'un seul cmd.exe en cours d'exécution, vous pouvez obtenir le PID de cette façon:
la source
Cela devrait faire l'affaire:
la source
Si vous souhaitez trouver le PID du nom imag "notepad.exe", le code suivant fonctionnera pour vous:
la source
Si vous avez le kit de ressources Windows 2003, faites-le passer par qgrep pour obtenir uniquement la ligne souhaitée. Vous pouvez ensuite extraire le pid à partir d'ici (cela suppose que vous n'avez qu'un seul cmd en cours d'exécution à la fois),
la source
Jetez un œil à cette petite astuce de lot . Il définit le titre de cmd sur une valeur spéciale puis utilise la liste des tâches pour le trouver. Inventif
\\ Greg
la source
CECI EST COURT POUR OBTENIR UN ID DE PROCESSUS POUR UN CMD OUVERT
la source
Cette réponse vous donnera UNIQUEMENT l'ID du processus, et aucun des éléments supplémentaires inclus dans la réponse du haut.
Explication:
-il n'y aura pas de PID pour cmd.exe supérieur à 18100, donc vérifiez si PID2 est supérieur à 8100 afin que nous sachions s'il s'agit d'un nombre à 4 ou 5 chiffres
cas 1: un PID à 5 chiffres comme 17504 a un PID1 val 17504 et un PID2 val de 1750, nous utilisons donc PID1
cas 2: un PID à 4 chiffres comme 8205 a une valeur PID1 de 8205 "et une valeur PID2 de 8205, nous utilisons donc PID2
cas 3: un PID à 4 chiffres comme 4352 a une valeur PID1 de 4352 "et une valeur PID2 de 4352, nous utilisons donc PID2
la source