2017-02-19 59 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 
相關問題