从REG QUERY搜索中选择特定结果

时间:2018-11-03 21:05:10

标签: windows batch-file cmd windows-10

我正在尝试提取 Windows 10登录背景图片(从“ Windows Spotlight”中提取)并将其复制到另一个位置以供进一步使用。到目前为止,我已经使用下面提供的批处理代码成功完成了此任务。

@echo off
for /F "skip=6 tokens=2*" %%A in ('REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative\ /F landscapeImage /S /V') DO (
  for %%F in (%%B) do (
    set Background=%%F
    goto :next
  )
)
:next
copy %Background% "d:\background.jpg" /Y

我最大的担心是,尽管它在我的计算机上运行良好,但注册表结构在其他计算机上看起来可能会有所不同,而我的代码对此完全没有准备。

其原因可能是使用skip=6参数的盲目猜测。在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative\中对landscapeImage的搜索返回了3个结果,只有最后一个导致了我在登录页面上看到的图像。由于我不知道如何选择特定的搜索结果,因此我使用了skip参数,但是由于这个原因,批处理脚本仅在至少有3个搜索结果且第3个是搜索结果的情况下才能正常工作我实际上正在寻找-在其他情况下,它只会失败。

总而言之,我不知道该怎么做

  1. 检查从REG QUERY命令返回的搜索结果。

  2. 选择特定的搜索结果。

另一个问题(与上述批处理脚本问题无关)是我不确定Windows如何确定将哪个图像用作背景(它定期更改)。我只是假设这是搜索结果中的最后一个(在我的情况下是对的)。我在注册表中找不到其他有关背景图像文件的提及。我尝试从该键中查找其他参数,但是也没有返回任何结果。也欢迎对此问题提出任何建议。

这是我能想到的最好的方法,但是现在我只是被卡住了。

2 个答案:

答案 0 :(得分:2)

您可以考虑将所有查询输出分配给单独的变量。如果要调用该数组。这会将所有图像分配给一个变量数组,并为您找到找到的图像计数。

@echo off
set "cnt=0"
set "query=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative\"
for /F "TOKENS=1-2* delims= " %%G in (
    'REG QUERY %query% /F landscapeImage /S /V ^|find /I "landscapeImage"'
) DO (
    set /a "cnt+=1"
    CALL set "image%%cnt%%=%%I"
)
echo Number of Images=%cnt%
set image
pause

注意:在我的计算机上,它还输出3张图像,最后一张是当前登录背景图像。

如果只想将最后一个图像设置为变量,则放弃执行计数的代码并使用基本的set命令。

set "image=%%I"

我的登录背景图像再次更改,查询中的第三个图像是登录屏幕图像。似乎是一致的。

答案 1 :(得分:0)

对于感兴趣的人,这是我用来提取Windows 10登录背景图像的最终批处理代码(基于Squashman的回答):

@echo off
set "query=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative\"
for /F "TOKENS=1-2* delims= " %%G in (
    'REG QUERY %query% /F landscapeImage /S /V ^|find /I "landscapeImage"'
) DO (
    set "image=%%I"
)
copy %image% "d:\background.jpg" /Y

我在%AppData%\Microsoft\Windows\Start Menu\Programs\Startup中的批处理文件上放置了一个快捷方式,以在每次系统启动时的所需位置制作背景图像的副本(来自所谓的“ Windows Spotlight”),以便保留该图像“最新”。