Jak uzyskać dostęp do zmiennej! Processid! poza pętlą for? Nie mogę zmusić go do działania
@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
Odpowiedzi:
1 dla odpowiedzi № 1Problem z twoim kodem polega na tym, że wyjście z pliku wmic
polecenie zawiera linie kończące, które nadpisują pobrany identyfikator procesu. Możesz przypisać zmienną tylko wtedy, gdy nie ma wartości
set "prozessid="
for /f ...... do (
if not defined prozessid (
set "prozessid=%%a"
echo !prozessid!
)
)
Lub możesz filtrować wyjście pliku wmic
polecenie, aby przetwarzać tylko prawidłowe wiersze
@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
Zmiany dokonane:
1 - Zmieniono wmic
zapytanie do użycia /value
więc otrzymujemy dane wyjściowe w formacie key=value
2 - Zmieniono for /f
opcje używania znaku równości jako ogranicznika i pobierania tylko drugiego tokena w wierszu, więc przetwarzana jest tylko linia z wartością %%a
będzie trzymał pid
3 - Po prostu kosmetyczne, zmienione for /f
używać usebackq
i zmienił cytowanie w wmic
dowództwo