Попытка установить значения в реестре для переменных, которые были установлены в пакетном сценарии.
В конце концов, мне просто нужны данные для 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
— удалить завершающие символы 4
из *.txt
профиля подписи Outlook. Мне нужно, чтобы фактическое значение %sig:~0,4%
было установлено в качестве значения реестра.
стоимость реестра
Я заменил свои комментарии этим ответом.
Во-первых, с помощью предоставленного вами кода вам нужно изменить 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
.
Ваше решение сработало отлично, спасибо. File NameWithoutExtension, чтобы эффективно использовать имя подписи профиля, которое также является именем файла. Я уверен, что есть более элегантный способ сделать это, но я не знаю ни одного.