/ / Variable Scope - variable d'accès extérieure à la boucle - Windows Batch - fenêtres, shell, boucles, fichier de commandes, ligne de commande

Portée variable - variable d'accès en dehors de la boucle - Batch Windows - fenêtres, shell, boucles, fichier de commandes, ligne de commande

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 № 1

Le 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