2010-06-08 53 views
3

我需要一種方法來存儲當前用戶的SID在一個變量,我嘗試了很多的變種:店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 path win32_useraccount where name='%UserName%' get sid 應該返回3行,我需要第二個存儲在一個變量。

有人可以修復我的腳本嗎?

編輯:我正在使用.cmd文件。

回答

4

這應該修復它:

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% 

記下的"delims= " FOR循環。它會將空格處的輸入分隔開,這些空格位於WMI查詢輸出結尾處。

條件if not "%%a"=="SID"將在第二次迭代中爲真,然後分配變量並跳出循環。

希望有所幫助。

+0

感謝的人,是DIT它,對於最近的反應感到遺憾,我正忙於做其他的事情 – user361191 2010-08-06 11:44:08

1

另一種解決辦法是:

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 
1

我寫這篇文章的代碼和它的工作對我好

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

我喜歡這個,但如果用戶名包含是一個空間? – Jason 2017-06-12 14:28:40

+0

另外值得注意的是,whoami的處理速度比wmic快得多。 – Jason 2017-06-12 14:38:46

0

WMIC的另一實施

@ECHO OFF 
::SET Variables 
SET _USERSID=NoValue 
SET _User=QueryUserName 
::Run the WMIC Command 
@FOR /F "SKIP=1" %A IN ('"wmic useraccount where name='%_User%' get sid"') DO @FOR %B IN (%A) DO @SET _USERSID=%B 

::Now do something with the SID IF EXISTS 
:: Example below 
cls 
::Advise if the UserID was valid and echo out WMIC results 
@IF %_USERSID% == NoValue ECHO  USER ****%_User%**** NOT VALID 
@ECHO  WMIC Command %_USERSID% 

::Example of using the WMIC %_USERSID% variable for something 
@IF NOT %_USERSID% == NoValue REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%_USERSID%" /F 

::SET ECHO Command Prompt ON 
@ECHO ON