Выберите конкретный результат из поиска REG QUERY - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь извлечь фоновое изображение Windows 10 Logon (из «Центра внимания Windows») и скопировать его в другое место для дальнейшего использования. До сих пор я успешно делал это, используя код пакета, указанный ниже.

@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 результата поиска, а третий - тот, который я ' я на самом деле ищу - в других случаях он просто потерпит неудачу.

Подводя итог, я не знаю, как:

  1. Проверьте, сколько результатов поиска возвращается из команды REG QUERY.

  2. Выберите конкретный результат поиска.

Другая проблема (не связанная с проблемой пакетного скрипта, описанной выше) заключается в том, что я не уверен, как Windows решает, какое изображение используется в качестве фона (оно регулярно меняется). Я просто предположил, что это последний из результатов поиска (это было верно в моем случае). Я не смог найти никаких других упоминаний файла фонового изображения в реестре. Я попытался найти другие параметры из этого ключа, но это также не дало никаких результатов. Любые предложения по этой проблеме также приветствуются.

Это лучшее, что я мог придумать, но теперь я просто застрял.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Для всех, кто хочет, вот последний пакетный код, который я использую для извлечения фонового изображения входа в 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») в нужном месте при каждом запуске системы, чтобы изображение оставалось «вверх» -в-дата».

0 голосов
/ 04 ноября 2018

Вы могли бы рассмотреть возможность назначения всех выходных данных запроса для отдельных переменных. Массив, если вы хотите так его назвать. Это назначит все изображения массиву переменных и подсчитает, сколько их найдено.

@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 "image=%%I"

Фоновое изображение моего входа снова изменилось, и третье изображение из запроса - это изображение экрана входа. Кажется, чтобы быть последовательным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...