Batch file 将SID存储在变量中
我需要一种将当前用户的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
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