繁体   English   中英

变量范围-for循环外的访问变量-Windows Batch

[英]Variable Scope - access variable outside for-loop - Windows Batch

如何访问变量!processid! 在for循环之外? 我无法正常工作

@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

您的代码的问题在于wmic命令的输出包含结束行,这些行将覆盖检索到的进程ID。 您只能在没有值的情况下分配变量

set "prozessid="
for /f ...... do (
    if not defined prozessid (
        set "prozessid=%%a"
        echo !prozessid!
    )
)

或者,您可以过滤wmic命令的输出以仅处理正确的行

@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

所做的更改:

1-将wmic查询更改为使用/value因此我们得到的格式为key=value

2-更改for /f选项,以使用等号作为分隔符,并且仅检索该行中的第二个标记,因此仅处理具有值的行,并且%%a将保留pid

3-仅仅是外观,更改for /f以使用usebackq并更改了wmic命令中的引用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM