如何将注册表值设置为批处理变量

时间:2019-04-07 15:10:16

标签: batch-file outlook registry

尝试将注册表中的值设置为在批处理脚本中设置的变量。

最后,我只需要注册表项NewSignature下的HKCU\Software\Microsoft\Office\16.0\Common\MailSettings数据,是运行dir /b %appdata%\Microsoft\Signatures\*.txt返回的字符串,因此Outlook配置文件签名为已经存在的将设置为使用。

我尝试了各种方法来回显结果或转义%值,但是还没有找到返回实际值的方法。

for /F "tokens=*" %%g in ('dir /b %appdata%\Microsoft\Signatures\*.txt') do set sig=%%g

set si=%%sig:~0,4%%

reg add "HKCU\Software\Microsoft\Office\16.0\Common\MailSettings" /v NewSignature /t REG_EXPAND_SZ /d %si% /f

reg add "HKCU\Software\Microsoft\Office\16.0\Common\MailSettings" /v ReplySignature /t REG_EXPAND_SZ /d %si% /f

当前,它导致将%sig:~0,4%设置为注册表值。 ~0,4将删除Outlook签名配置文件的4中的*.txt尾随字符。我需要将%sig:~0,4%的实际值设置为注册表值。 value of registry

1 个答案:

答案 0 :(得分:0)

我已用此答案替换了我的评论。

首先,使用提供的代码,您需要将set si=%%sig:~0,4%%更改为

set "si=%sig:~0,-4%"

但是,如果只在文件名后加上扩展名,则不需要set另一个变量,然后将其扩展以删除扩展名。您可以简单地删除:

set "si=%sig:~0,-4%"

并修改for /F "tokens=*" %%g in ('dir /b %appdata%\Microsoft\Signatures\*.txt') do set sig=%%g

阅读:

For %%A In ("%appdata%\Microsoft\Signatures\*.txt")Do Set "sig=%%~nA"

并在您的%sig%行中使用%si%代替reg add

Reg Add "HKCU\Software\Microsoft\Office\16.0\Common\MailSettings" /V NewSignature /T REG_EXPAND_SZ /D "%sig%" /F
Reg Add "HKCU\Software\Microsoft\Office\16.0\Common\MailSettings" /V ReplySignature /T REG_EXPAND_SZ /D "%sig%" /F

另外,您似乎正在使用REG_EXPAND_SZ数据类型,当它不是真正必要时,因为您没有使用可扩展字符串,而只是一个字符串。因此,您可以使用以下类型的语法:

Reg Add HKCU\Software\Microsoft\Office\16.0\Common\MailSettings /V NewSignature /D "%sig%" /F
Reg Add HKCU\Software\Microsoft\Office\16.0\Common\MailSettings /V ReplySignature /D "%sig%" /F

将所有内容放到脚本中,如下所示:

@Set "Fldr=%AppData%\Microsoft\Signatures"
@Set "RKey=HKCU\Software\Microsoft\Office\16.0\Common\MailSettings"
@Set "Vals="NewSignature","ReplySignature""
@For %%A In ("%Fldr%\*.txt")Do @For %%B In (%Vals%)Do @Reg Add "%RKey%" /V %%B /D "%%~nA" /F>Nul

如果您认为有必要,显然可以在/T REG_EXPAND_SZ命令中插入Reg Add

请注意,整个答案假设.txt目录中只有一个Signatures文件。如果可以有多个文件,则应尝试说明如何选择适当的.txt文件。