通过批处理cmd重命名/删除注册表中的键

问题描述 投票:0回答:4

当 Windows 7 中的用户登录并且配置文件损坏时,他们会得到一个空白的配置文件。我可以通过访问注册表并删除临时配置文件、设置引用计数和状态值来轻松修复。我陷入了我的批处理中,因为一旦我在批处理中调用它,我从注册表中的提取就会在注册表项名称中添加 2 个空格。如果我回显%SID%,它会返回正确的值,没有可见空间。注册表确实有%SID%和%SID%.bak

@echo off
setlocal ENABLEDELAYEDEXPANSION
for /F "skip=1 delims=" %%j in ('wmic useraccount where name^="%username%" get SID') do (
  set SID=%%j
  goto :DONE
)
:DONE
echo  SID=%SID%

reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%SID%.bak"
pause

批次结果:

 SID=S-1-5-21-1559011707-81249799-2450556423-1000
Permanently delete the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Window
s NT\CurrentVersion\ProfileList\S-1-5-21-1559011707-81249799-2450556423-1000  .b
ak (Yes/No)? y
ERROR: The system was unable to find the specified registry key or value.
Press any key to continue . . .

如您所见,输出在 SID 和文件扩展名后面添加了 2 个空格

有什么想法吗?

windows batch-file cmd registry wmic
4个回答
1
投票

WMI 查询结果以 UCS-2 LE 编码,而不是 ANSI。捕获

wmic
的输出时,我发现有时向查询添加一次性列并使用
/format:csv
保留格式很有帮助。

@echo off
setlocal

for /f "tokens=2 delims=," %%I in (
    'wmic useraccount where "name='%username%'" get SID^,Status /format:csv'
) do set "SID=%%I"

rem // echo result
set SID

1
投票

MarcB 是对的,var 不正确,因为末尾有空格。
您可以检查

echo
中带引号的空白并使用
delims= "

解决它
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /F "skip=1 delims= " %%j in ('wmic useraccount where name^="%username%" get SID') do (
  set SID=%%j
  goto :DONE
)
:DONE
echo  SID = '%SID%'
pause
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%SID%.bak"
pause

0
投票

只需添加以下内容:

  set SID=!SID: =!

这将删除所有空间!


0
投票

-- 已删除,因为本应发布在不同的问题上。

© www.soinside.com 2019 - 2024. All rights reserved.