Batch file 将SID存储在变量中

Batch file 将SID存储在变量中,batch-file,cmd,Batch File,Cmd,我需要一种将当前用户的SID存储在变量中的方法,我尝试了许多变体: setlocal enableextensions for /f "tokens=*" %%a in ( '"wmic path win32_useraccount where name='%UserName%' get sid"' ) do ( if not "%%a"=="" set myvar=%%a echo/%%myvar%%=%myvar% pause endlocal 没有人在工作 wmic路径win

我需要一种将当前用户的SID存储在变量中的方法,我尝试了许多变体:

setlocal enableextensions 
for /f "tokens=*" %%a in ( 
'"wmic path win32_useraccount where name='%UserName%' get sid"'
) do ( 
if not "%%a"==""
set myvar=%%a
echo/%%myvar%%=%myvar% 
pause 
endlocal 
没有人在工作

wmic路径win32\u用户名为“%UserName%”的用户帐户获取sid
应该返回3行,我需要存储在变量中的第二行

有人能修改我的脚本吗

编辑:我正在使用一个.cmd文件。

这应该可以修复它:

for /f "delims= " %%a in ('"wmic path win32_useraccount where name='%UserName%' get sid"') do (
   if not "%%a"=="SID" (          
      set myvar=%%a
      goto :loop_end
   )   
)

:loop_end
echo %%myvar%%=%myvar%
注意FOR循环中的
“delims=“
”。它将在WMI查询的输出ouf末尾包含的空格处分隔输入

如果条件
不是“%%a”==“SID”
,则在第二次迭代中将为真,然后分配变量并中断循环


希望有帮助。

另一个解决方案可能是:

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

我写了这段代码,它对我很好

for /F "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i

WMIC的另一个工作示例

@ECHO关闭
::设置变量
设置_USERSID=NoValue
SET _User=QueryUserName
::运行WMIC命令
@对于在(%A)DO@SET中的%B的/F“跳过%1”%A(““wmic useraccount,其中name=”%\u User%'get sid“)DO@
::现在,如果存在SID,请对其进行处理
::下面的例子
cls
::通知用户ID是否有效并回显WMIC结果
@如果%\u USERSID%==NoValue ECHO USER****%\u USER%****无效
@ECHO WMIC命令%\u USERSID%
::将WMIC%\u USERSID%变量用于某些内容的示例
@如果不是%\u USERSID%==NoValue REG删除“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%\u USERSID%”/F
::将ECHO命令提示符设置为ON
@呼应

希望这对您有用

for /f "delims= " %%a in ('"wmic path win32_useraccount where name='%UserName%' get sid"') do (
   if not "%%a"=="SID" (        
      set myvar=%%a
    goto MESSAGE
   )  
)
goto MESSAGE

echo -----your message---------


谢谢,伙计,这是dit,很抱歉反应太晚了,我本来要忙着做其他事情的。我喜欢这样,但是如果用户名包含空格,它不会坏吗?同样值得注意的是,whoami的处理速度比wmic快得多。
for /f "delims= " %%a in ('"wmic path win32_useraccount where name='%UserName%' get sid"') do (
   if not "%%a"=="SID" (        
      set myvar=%%a
    goto MESSAGE
   )  
)
goto MESSAGE

:MESSAGE
echo. 
echo Use this only if all other troubleshooting steps failed. 
echo.
echo and restart the system
set /p yesno=[y/n]
if "%yesno%" equ "y" goto UNINSTALL
if "%yesno%" equ "Y" goto UNINSTALL
if "%yesno%" equ "yes" goto UNINSTALL
if "%yesno%" equ "Yes" goto UNINSTALL