用于更改 Microsoft Office 产品模板注册表项中的值的批处理脚本

问题描述 投票:0回答:1

我想更改许多计算机上某些 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
循环、始终变化的关键路径和用户名的工作方法数据中。

有人可以帮助我如何获得一个简短的批处理脚本来执行此操作吗?

batch-file cmd registry
1个回答
-1
投票

以下批处理文件应该完成该任务:

@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
,以便能够使用 IF 条件进行不区分大小写的字符串比较,验证前两个注册表查询是否找到了搜索到的注册表值
Item 1
和注册表项
File MRU

第三个注册表查询仅处理指定项的子项,根本不搜索注册表值或子项,因此始终处理不为空的整个输出行。这里使用 FIND 来确保在指定的注册表项中找到以

ADAL_
开头的正确注册表项。

有可能是注册表项

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Recent Templates

根本不存在,因为用户到目前为止尚未启动 Excel 并单击选项卡 File(德语:Datei)。此用例会导致执行上述批处理脚本时出现错误消息。

出于使用

%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
|
的说明。重定向运算符
>
|
必须在
FOR
命令行上使用脱字符号 ^ 进行转义,以便在 Windows 命令解释器在执行命令 FOR(执行嵌入的
)之前处理此命令行时将其解释为文字字符reg
命令行(带有
find
),使用在后台启动的单独命令进程。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • echo /?
  • endlocal /?
  • exit /?
  • find /?
  • for /?
  • goto /?
  • reg /?
  • reg add /?
  • reg query /?
  • set /?
  • setlocal /?

另请参阅 使用 Windows 批处理文件的单行多个命令,了解运算符

&
&&
的说明。

© www.soinside.com 2019 - 2024. All rights reserved.