2015-12-16 3 views
1

Я пытаюсь скомпилировать командный файл, чтобы получить идентификатор пользователя текущего пользователя, а затем использовать его для удаления определенного раздела реестра.Использовать переменную в пакетном файле несколько раз

Я нашел это, чтобы получить SID текущего вошедшего в систему пользователя:

WMIC учетная_запись_пользователя где имя = '% имя пользователя%' получить с.и.д.

Это работало отлично, и мне дали:

SID

S-1-5-21-ХХХХХ-ХХХХХ-ХХХХ-ХХХ

Теперь я хотел бы использовать S-1-5-21 .... и т. Д. Чтобы удалить определенный раздел реестра для текущего пользователя, так что S-1-5-21 и т. Д. Я могу это сделать? Или есть более простой способ, способный определить текущий SID и, следовательно, удалить ключ?

спасибо!

ответ

1

Предполагая, что вы хотите удалить ключ реестра ...

HKEY_USERS\[SID-OF-USER]\test 

... этот сценарий должен резать :

@ECHO OFF 
SET USERNAME=SomeUserName 

:: retrieve user's SID, store in file. NOTE: a user can have more than 1 SID. 
wmic useraccount where name='%USERNAME%' get sid | FINDSTR "^S-" > tmp.txt 

:: load result into variable. NOTE: this will load the first line only. 
SET /P SID_=<tmp.txt 

:: remove spaces which turned out to be appended at the end. 
SET SID=%SID_: =% 

:: delete key in the registry (will probably required elevated privileges) 
:: the /F causes reg.exe not to ask for confirmation 
REG DELETE "HKEY_USERS\%SID%\test" /F 

:: cleanup 
DEL tmp.txt 

Я не знаю более простой способ «определить текущий SID и удалить ключ».

+1

Извините за поздний ответ, я сделал небольшое изменение на этом, и он отлично работал! Спасибо! – Jeremy

1

Попробуйте это:

@echo off 
wmic useraccount where name='%username%' get sid > temp.txt &more temp.txt > temp2.txt &del temp.txt 
for /F "tokens=*" %%A in (temp2.txt) do set "userID=%%A" 
del temp2.txt 
echo %userID% 
pause 

Вы можете использовать переменную% USERID% после этого кода.

Обратите внимание, что вам нужно использовать больше из-за способа WMIC разбирает это выход

Смежные вопросы