我正在尝试提取 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个是搜索结果的情况下才能正常工作我实际上正在寻找-在其他情况下,它只会失败。
总而言之,我不知道该怎么做
检查从REG QUERY
命令返回的搜索结果。
选择特定的搜索结果。
另一个问题(与上述批处理脚本问题无关)是我不确定Windows如何确定将哪个图像用作背景(它定期更改)。我只是假设这是搜索结果中的最后一个(在我的情况下是对的)。我在注册表中找不到其他有关背景图像文件的提及。我尝试从该键中查找其他参数,但是也没有返回任何结果。也欢迎对此问题提出任何建议。
这是我能想到的最好的方法,但是现在我只是被卡住了。
答案 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”),以便保留该图像“最新”。