Как установить значение реестра в качестве пакетной переменной - PullRequest
0 голосов
/ 07 апреля 2019

Попытка установить значения в реестре для переменных, которые были установлены в пакетном скрипте.

В конце дня мне просто нужны данные для 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%, чтобы установить в качестве значения реестра. значение реестра

1 Ответ

0 голосов
/ 07 апреля 2019

Я заменил мои комментарии этим ответом.

Во-первых, с вашим предоставленным кодом вам нужно изменить 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, если считаете это необходимым.

Обратите внимание, что весь этот ответ предполагает, что в каталоге Signatures имеется только один файл .txt.Если их может быть больше одного, попытайтесь объяснить, как вы хотите выбрать соответствующий файл .txt.

...