将具有多个条件的 WMIC 查询批量存储到变量中

Batch Store WMIC Query with multiple conditions into variable

我在批处理脚本中使用这一行,它成功地将用户的 SID 值存储到名为 SID 的变量中

FOR /F "tokens=1,2 delims==" %%s IN ('wmic path win32_useraccount where name^='%_curruser%' get sid /value ^| find /i "SID"') DO SET SID=%%t

我想修改它以在 WMIC 查询中包含一个 "AND",但我似乎无法让它工作。

正确的查询是:

wmic path win32_useraccount where "name='%USERNAME%' and Domain like 'HB%'" GET SID /VALUE

有人可以帮我翻译一下以便将 SID 值存储到变量中吗?

您需要 escape the % percent characterDomain like 'HB%' 中加倍,如下所示:

FOR /F "tokens=1,2 delims==" %%s IN ('
    wmic path win32_useraccount where "name='%USERNAME%' and Domain like 'HB%%'" GET SID /VALUE ^| find /i "SID"
') DO for /F "tokens=*" %%i in ("%%t") do SET "SID=%%i"

这里 for 循环是

  • %%s 检索 SID 值;
  • %%i 删除值 returned 中结尾的 carriage returnwmic 行为):每个输出行以 0x0D0D0A (CR+CR+LF) 而不是常见的 0x0D0A (CR+LF).
  • 结尾

参见 Dave Benham 的 WMIC and FOR /F: A fix for the trailing <CR> problem