2017-02-19 8 views
0

Я ищу для реализации простого командного файла, который переименует текущую локальную папку профиля, резервные ключи реестра, а затем удалит ключи SID списка профилей. Поэтому позволяет компьютеру создать новый локальный профиль, который не является временным.Как сделать вывод CMD вместо строки в переменной SET

Где %U% это имя учетной записи

set a=wmic useraccount where name="%U%" get sid /value 

и поэтому, когда я исполняю ниже (где %a% находится выше команда):

reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%a% /f 

интерпретирует его как:

reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\wmic useraccount where name="%U%" get sid /value" 

Но я хочу:

"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\SID=S-1-5-21-3519583588-1143172139-1479499458-1001" 

Если я позвоню %a%, он отображает

SID = S-1-5-21-3519583588-1143172139-1479499458-1001

и если эхо %a%, он отображает

wmic useraccount where name="%U%" get sid 

Если я просто введите %a%, он отображает

SID = S-1-5-21-3519583588-1143172139-1479499458-1001

Просто объяснение, почему это происходит было бы здорово.

ответ

2

набор не имеет встроенной способности выполнить команду и сохранить результат, как вы собираетесь с линией:

set a=wmic useraccount where name="%U%" get sid /value 

Вместо простой хак:

@echo off 
for /f %%A in ('wmic useraccount where "name='%USERNAME%'" get sid /value ^| findstr SID') do (set %%A) 
echo The SID is %SID% 

После этого вы должны уметь:

reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%SID%" /f 
+2

Ответ от команды wmic будет 'SID = ....' поэтому опускать 'SID =' и просто 'устанавливать %% A'. И поскольку другого выхода нет, 'goto: br' не требуется. – LotPings

+0

Хорошие баллы. Я изменил свой ответ. – abelenky

+0

Спасибо @abelenky Я обязательно отвечу на это :) :) –

0

В отличие от Unix, где вы используете обратные ссылки для выражения, которое оценивает s в стандартный вывод внешней команды нет такого синтаксиса в пакетах. Вместо этого вам нужно использовать цикл for для выходных строк, чтобы присвоить его переменной, например discussed here.

for /f "delims=" %%i in ('wmic...') do set A=%%i