批处理文件 REG QUERY

Batch file REG QUERY

我正在编写一个脚本来检索“DefaultUserName”注册表项的值。我有:

@echo off
Title Kiosk Account Autologin Password Changer
::Search for current Kiosk Account . . .
echo Identifying Kiosk Account
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon /s
Pause

但我一直收到语法错误。我是编码初学者,感谢所有帮助。

最终目标是有一个输入输出 table 以根据用户名自动更改“DefaultPassword”键。我工作的公司正在更改所有密码,我不想全部手动完成。

只需在实际命令行中加上引号即可:

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /s

没有它们,Windows NT 处的 space 会导致语法错误,因为那时它将 NT\CurrentVersion\Winlogon 视为传递给 reg query 命令的(第三个)参数。

鉴于您在 中所述的其他要求,这应该添加所需的密码字符串值数据,前提是现有的默认用户名恰好是不区分大小写的字符串 A

请注意,因为您是在受保护的 HKEY_LOCAL_MACHINE 根密钥内进行修改,所以下面的示例需要 运行 具有提升的权限。

@%SystemRoot%\System32\reg.exe Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "DefaultUserName" 2>NUL | %SystemRoot%\System32\findstr.exe /IRC:"^  *DefaultUserName  *REG_SZ  *A$" 1>NUL && %SystemRoot%\System32\reg.exe Add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "DefaultPassword" /T "REG_SZ" /D "1" /F 1>NUL

这里您可能唯一不理解的是条件运算符&&。有两个条件运算符,&&||,前者表示如果上一条命令报告成功,后者表示如果上一条命令报告不成功。因此,在上述情况下,findstr.exe 查找以一个或多个 space 字符开头的行,后跟不区分大小写的字符串 DefaultUserName,再后跟一个或多个 spaces,后跟不区分大小写的字符串 REG_SZ,后跟一个或多个 spaces,并以不区分大小写的字符串 A 结尾。要了解有关 FindStr 命令实用程序选项的更多信息,请打开命令提示符 window,键入 findstr /? 并按 ENTER 键。如果返回的字符串匹配,它会通过 StdOut 打印到控制台 window,所以我将打印重定向到 NUL 设备,因为我们不需要看到或使用它,下面的命令&& 是 运行。 (如果不匹配,则该行的其余部分不会是 运行).

修改命令行,因为老实说,你还没有真正得到A的用户名,直接改成A根据需要在 FindStr 匹配中。因此,例如,如果您真的在寻找 Michael 的默认用户名,您将使用:

@%SystemRoot%\System32\reg.exe Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "DefaultUserName" 2>NUL | %SystemRoot%\System32\findstr.exe /IRC:"^  *DefaultUserName  *REG_SZ  *Michael$" 1>NUL && %SystemRoot%\System32\reg.exe Add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "DefaultPassword" /T "REG_SZ" /D "1" /F 1>NUL

但是请记住您的 findstr /? 命令的输出。您会注意到某些字符是特殊字符,因此如果不转义某些特殊元字符,所有用户名字符串都可能无法正常工作。