Comment puis-je accéder à la variable! Processid! en dehors de la boucle? Je n'arrive pas à le faire marcher
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SETLOCAL
FOR /F "tokens=* skip=1 delims=" %%a in (""wmic PROCESS WHERE "CommandLine LIKE "%%scanforstring%%" AND NOT CommandLine LIKE "%%WMIC%%"" get processid"") do (
set prozessid=%%a
echo !prozessid!
)
echo !prozessid!
PAUSE
endlocal
Réponses:
1 pour la réponse № 1Le problème avec votre code est que la sortie du wmic
La commande inclut les lignes de fin qui écraseront l'ID de processus récupéré. Vous pouvez affecter la variable uniquement lorsqu'elle n'a pas de valeur
set "prozessid="
for /f ...... do (
if not defined prozessid (
set "prozessid=%%a"
echo !prozessid!
)
)
Ou vous pouvez filtrer la sortie du wmic
commande pour traiter uniquement les lignes correctes
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "usebackq tokens=2 delims==" %%a in (`
wmic PROCESS WHERE "
CommandLine LIKE "%%scanforstring%%"
AND NOT CommandLine LIKE "%%WMIC%%"
" get processid /value
`) do (
set prozessid=%%a
echo 1 - !prozessid!
)
echo 2 - !prozessid!
PAUSE
endlocal
Modifications effectuées:
1 - modifié wmic
requête à utiliser /value
donc nous obtenons une sortie dans le format key=value
2 - modifié for /f
les options permettant d'utiliser le signe égal en tant que délimiteur et d'extraire uniquement le deuxième jeton de la ligne, de sorte que seule la ligne avec une valeur est traitée et %%a
tiendra le pid
3 - Juste cosmétique, changé for /f
utiliser usebackq
et a changé la citation dans le wmic
commander