Joh*_*ohn 12 windows-registry batch
我需要在注册表项中获取一个值并使用批处理文件存储在一个变量中。
我写了一个基本的命令行来举例说明我的逻辑(使用 echo 而不是设置变量):
for /f "tokens=3 delims= " %%a in ('reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "LastUsedUsername" ^|findstr /ri "REG_SZ"') do echo=%%a
Run Code Online (Sandbox Code Playgroud)
我希望用户名打印在屏幕上,但它没有发生。
我确定注册表值“LastUsedUsername”不为空,它确实有数据。此外,分隔符是制表符,而不是空格。
编辑
如果我只是输入
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "LastUsedUsername"
Run Code Online (Sandbox Code Playgroud)
...它返回:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
LastUsedUsername REG_SZ Administrador
Run Code Online (Sandbox Code Playgroud)
这段代码
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "LastUsedUsername" ^| findstr /ri "REG_SZ"
Run Code Online (Sandbox Code Playgroud)
...返回:
LastUsedUsername REG_SZ Administrador
Run Code Online (Sandbox Code Playgroud)
然后,当我使用 for 命令时,我没有从 echo 中得到任何输出。
小智 8
在某些情况下,批准的答案不正确 - 如果从注册表中读取的值包含白色字符,即空格(程序文件(x86)),则它仅返回值的第一部分(“程序”)。我想出的是:
FOR /F "tokens=2* skip=2" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" /v "CommonFilesDir"') do echo %%b
Run Code Online (Sandbox Code Playgroud)
结果是 C:\Program Files\Common Files
小智 6
您根本不需要 delims 开关,因为默认值是空格,这是 reg 查询返回的内容。在为这个 for 循环和注册表创建一个 bat 文件时,我得到了正确的回声,例如,RGB 背景颜色的“红色”值为 55:
for /f "tokens=3" %%a in ('reg query "HKCU\Control Panel\Colors" /V Background ^|findstr /ri "REG_SZ"') do echo %%a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56857 次 |
| 最近记录: |