Essayez avec quelque chose comme
@echo off
setlocal enableextensions disabledelayedexpansion
set "queue=testing"
for /f "tokens=2 delims==" %%a in ('
wmic process
where "name='cmd.exe' And commandLine like '%%%queue%%%'"
get ProcessID /value
') do echo %%a
ou
@echo off
setlocal enableextensions disabledelayedexpansion
set "queue=testing"
for /f "tokens=2 delims==" %%a in ('
wmic process
where ^(
name^="cmd.exe"
and commandLine like "%%%queue%%%"
^)
get ProcessID /value
') do echo %%a
seulement deux échantillons différents d'échapper à la commande wmic
à l'intérieur du for /f
.
Dans le premier cas, les conditions where
sont enveloppées dans des guillemets doubles avec des valeurs en utilisant des guillemets simples. Il n'y a pas besoin de caractères d'échappement car les guillemets le traiteront, mais toutes les conditions doivent être sur la même ligne. Dans le second cas, les conditions where
sont entourées de parenthèses avec des valeurs entre guillemets. Certains caractères auront besoin de caractères d'échappement, mais vous avez plus d'options sur la façon d'écrire la commande.
Notez que ces échantillons ont un problème qui probablement ne vous affectera pas: recherche les deux échantillons pour cmd
cas, et la commande wmic
est démarré dans une instance cmd
séparée (la façon dont for /f
exécute des commandes), et cette instance correspondra également à la condition (il inclut la même sous-chaîne dans sa propre ligne de commande).
modifié adapter aux commentaires
@echo off
setlocal enableextensions disabledelayedexpansion
set "queue=testing"
for /f "tokens=2 delims==" %%a in ('
wmic process
where ^(
name^="cmd.exe"
and commandLine like "%%%queue%%%"
and not commandLine like "%%[{%random%%random%%random%}]%%"
^)
get ProcessID /value 2^>nul
') do echo %%a
Pour éviter l'inclusion de l'instance cmd
créée par la commande for /f
qui détient la commande wmic
nous ne devons inclure une condition supplémentaire qui mathématiques cette instance problématique (la condition sera dans la ligne de commande de l'instance cmd
) mais cela ne doit pas correspondre à l'instance que nous recherchons.
votre code fonctionne parfaitement. J'ai eu le même mais j'ai oublié la valeur /. fait une différence. Cependant, vous avez raison de dire que la commande wmic a démarré un cmd distinct qui efface. Mais avant qu'il efface il retourne un PID qui affiche par rapport au PID que je cherche. De toute façon pour contourner ça?Je pensais que je pourrais écrire dans le fichier et supprimer le PID errant et faire écho le fichier. –
@DjeliStyles, réponse mise à jour. Voir si cela fonctionne pour vous –
est donc la valeur aléatoire trois valeurs différentes {% valueA %% valueB %% valueC %%} ou la même valeur trois fois? Comme% dirPath %% dirPath %% dirPath% –