Я хочу изменить шаблон по умолчанию для некоторых продуктов Microsoft Office на нескольких компьютерах. Все работает отлично, за исключением закрепления шаблона на стартовом экране продуктов MS Office.
Я нашел раздел реестра, чтобы закрепить их там, который сохраняет путь к шаблону, который я хочу быстро изменить с помощью пакетного файла.
Информация о закрепленном шаблоне сохраняется с двумя значениями реестра Item 1
и Item Metadata 1
, а путь
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Recent Templates\ADAL_5DBCF6AC9A27C96B299D94D181DD223A6B8AB341FAFC42E9CFCFA1E61E3B69A6\File MRU
Данные Item 1
:
[F00000001][T01D83DF9542BD760][O00000000]*C:\Users\test\Documents\Benutzerdefinierte Office-Vorlagen\template.xltx
Данные Item Metadata 1
:
<Metadata><AppSpecific><id>C:\Users\test\Documents\Benutzerdefinierte Office-Vorlagen\template.xltx</id><nm>template</nm><du>C:\Users\test\Documents\Benutzerdefinierte Office-Vorlagen\template.xltx</du></AppSpecific></Metadata>
Новые данные имеют другое имя шаблона и нуждаются в ссылке на переменную среды %username%
, которая будет использоваться для сопоставления с вошедшим в систему пользователем.
Проблема здесь в том, что путь ключа, начинающийся с ADAL_
, имеет случайное значение.
Я уже просмотрел несколько тем, где искали какие-то ключи реестра и удаляли их. До сих пор я могу найти ключи с помощью
reg query "HKCU\SOFTWARE\Microsoft\Office\16.0\Excel\Recent Templates" /s /f "Item"
Я попытался получить вывод команды запроса, назначенной переменной среды, чтобы использовать ее в команде reg add
, но не могу найти рабочий метод с циклом for /f
, постоянно меняющимся путем к ключу и именем пользователя в данных.
Может ли кто-нибудь помочь мне в том, как получить короткий пакетный скрипт для этого?
Следующий пакетный файл должен выполнить эту задачу:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "tokens=1*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKCU\SOFTWARE\Microsoft\Office\16.0\Excel\Recent Templates" /s /f "Item 1" 2^>nul') do if /I "%%I" == "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Recent" set "RegKey=%%I %%J" & goto UpdateRegistry
for /F "tokens=1*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKCU\SOFTWARE\Microsoft\Office\16.0\Excel\Recent Templates" /s /f "File MRU" 2^>nul') do if /I "%%I" == "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Recent" set "RegKey=%%I %%J" & goto UpdateRegistry
for /F "delims = " %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKCU\SOFTWARE\Microsoft\Office\16.0\Excel\Recent Templates" 2^>nul ^| %SystemRoot%\System32\find.exe /I "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Recent Templates\ADAL_"') do set "RegKey=%%I\File MRU" & goto UpdateRegistry
echo ERROR: No "Item 1", "File MRU" or ADAL_ subkey found in Windows registry!
exit /B
:UpdateRegistry
%SystemRoot%\System32\reg.exe ADD "%RegKey%" /f /v "Item 1" /t REG_SZ /d "[F00000001][T01D83DF9542BD760][O00000000]*%USERPROFILE%\Documents\Benutzerdefinierte Office-Vorlagen\template.xltx" >nul
%SystemRoot%\System32\reg.exe ADD "%RegKey%" /f /v "Item Metadata 1" /t REG_SZ /d "<Metadata><AppSpecific><id>%USERPROFILE%\Documents\Benutzerdefinierte Office-Vorlagen\template.xltx</id><nm>template</nm><du>%USERPROFILE%\Documents\Benutzerdefinierte Office-Vorlagen\template.xltx</du></AppSpecific></Metadata>" >nul
endlocal
Необходимо разбить первую непустую строку на две подстроки по первому символу пробела с присвоением первой подстроки (токена) переменной цикла I
, а остальную часть строки следующей переменной цикла J
, чтобы можно было проверить с помощью ЕСЛИ условие, выполняющее сравнение строк без учета регистра, что искомое значение реестра Item 1
соответственно ключ реестра File MRU
вообще найдено первыми двумя запросами реестра.
Третий запрос реестра обрабатывает только подразделы указанного ключа без поиска значения реестра или подраздела вообще и, следовательно, всегда обрабатывает все строки вывода, которые не являются пустыми. Здесь используется НАЙТИ, чтобы убедиться, что найден правильный раздел реестра, начинающийся с ADAL_
в указанном разделе реестра.
Возможно, ключ реестра
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Recent Templates
вообще не существует, потому что пользователь до сих пор не запускал Excel и не нажимал вкладку Файл (нем. Датей). Этот вариант использования приводит к сообщению об ошибке при выполнении пакетного сценария выше.
Запустите в окне командной строки следующие две команды для использования %USERPROFILE%
:
reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
Прочитайте документацию Microsoft о Использование операторов перенаправления команд для объяснения 2>nul
и |
. Операторы перенаправления >
и |
должны быть экранированы символом вставки ^
в командной строке ЗА, чтобы они интерпретировались как буквальный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды ЗА, которая выполняет встроенную командную строку reg
(с find
) в отдельной команде. процесс запущен в фоновом режиме.
Для понимания используемых команд и того, как они работают, откройте окно командная строка, выполните в нем следующие команды и очень внимательно прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
endlocal /?
exit /?
find /?
for /?
goto /?
reg /?
reg add /?
reg query /?
set /?
setlocal /?
См. также одна строка с несколькими командами с использованием пакетного файла Windows для объяснения операторов &
и &&
.
Большое тебе спасибо. Это работает как шарм. Операторы перенаправления были недостающей частью, о которой я не знал.