我正在尝试获取所有注册表项
HKEY_Local_Machine\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
,如果REG_EXPAND_SZ
键包含值C:\Users\sas-
脚本应该做的理想步骤:
1)获取用户的所有注册表条目使用:
reg query "HKEY_Local_Machine\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
>> xyz.txt
2)如果用户名是sas - ###(我们可以进入" REG_EXPAND_SZ")然后删除此条目:
for /f "skip=10 tokens=* " %%a in (xyz.txt) do (
for /f "eol=; skip=2 tokens=4 delims=\t" %k in ('reg query "%%a" /t REG_EXPAND_SZ') do (
if %k == "sas-" (reg delete "%%a")
)
)
答案 0 :(得分:0)
试试这个:
for /f "tokens=*" %%a in ('
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"') do (
for /f "tokens=*" %%b in ('
reg query "%%a" /v "ProfileImagePath" 2^>nul ^| find "sas-"') do
rem reg delete "%%a"
echo "%%a" >>C:\names.txt
)
我的基础是您查询ProfileImagePath
值,并删除值中包含sas-*
的任何键。我还需要删除一些换行符(只是为了便于查看)。
请先测试一下(我现在echo
'将它们转换为文本文件),如果您对此感到满意,请从{{rem
移除reg delete
1}}行。
答案 1 :(得分:0)
您应该可以从单个For
循环执行此操作; 但是,我并不特别喜欢使用此方法删除配置文件的想法。
@Echo Off
For /F "Tokens=1-2*" %%A In ('Reg Query^
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /S^
/F ProfileImagePath /V 2^>Nul') Do (
If Not "%%~A%%B"=="ProfileImagePathREG_EXPAND_SZ" (
Set "_C=Reg Delete "%%A%%B"") Else (Set "_P=%%~C"
SetLocal EnableDelayedExpansion
If Not "!_P:C:\Users\sas-=!"=="!_P!" Echo=!_C!
EndLocal))
Timeout -1
如果您对控制台输出感到满意,请从第8行删除Echo=
并删除第10行。