尝试将注册表中的值设置为在批处理脚本中设置的变量。
最后,我只需要注册表项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
答案 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
文件。