Добавление %USERPROFILE% к команде в реестре Windows

Добавление %USERPROFILE% к команде в реестре Windows

Я пытаюсь написать хак реестра, который упростит некоторые из моих задач по настройке, когда я создаю новую виртуальную машину или переделываю свой ноутбук. Одна из вещей, которую я делаю, это перехожу на портативные версии (синхронизированные в Dropbox) нескольких моих любимых приложений, включая Notepad++.

Я хочу создать запись в реестре, чтобы иметь возможность открыть в меню правой кнопки мыши опцию «Открыть с помощью Notepad++», которая является единственным, чего мне не хватает в портативной версии. Однако я получаю ошибку:

Windows cannot access the specified device, path or file. You may not have the 
appropriate permissions to access the item.

Вот мой .regфайл:

[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++]
"Icon"="%USERPROFILE%\\Dropbox\\Programs\\Setup\\Icons\\Notepad++.ico"
@=""

[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++\command]
@="%USERPROFILE%\\Dropbox\\Programs\\Notepad++\\notepad++.exe %1"

Значок работает отлично. Я могу заставить запись выше работать нормально, если я жестко закодирую C:\Users\myusername, но я здесь стремлюсь к переносимости.

Я почти уверен, что проблема заключается в поиске правильной последовательности перехода к символам %, но сложно сказать.

Предложения?

EDIT: Я выбрал add regвариант с командой, и после нескольких проб и ошибок вот команда, которая сработала:

reg add HKCR\*\shell\OpenWithNotepad++\command /t REG_EXPAND_SZ /ve /d ^%USERPROFILE^%"\Dropbox\Programs\Notepad++\notepad++.exe %1"

После выполнения команды я .regтакже экспортировал результаты в виде файла. Победы во всех отношениях.

решение1

Для использования (расширения) переменных среды в реестре значение должно иметь типREG_EXPAND_SZ.

На основеэтот вопрос, было бы проще добавить такое значение с помощью regкоманды, а не.regфайл..

reg add <KEY> /v <NAME> /t REG_EXPAND_SZ /d <DATA>

reg add /?Более подробную информацию об этом синтаксисе см .

Вы также можете закодировать данные в шестнадцатеричном формате. Вот несколько примеров этогоздесь:

REG_EXPAND_SZданные должны быть представлены в виде того, что MS называетдвоичныйтип данных (подтип "2"), поэтому значение должно быть отформатировано в своего рода шестнадцатеричном формате, разделенном запятыми, два токена на байт (дополненных нулями), с завершающим нулевым байтом, конечно (и дальнейшее объяснение, очевидно, выходит далеко за рамки этой статьи, и автор не будет нести ответственности за чье-либо неправильное использование неполной информации, предоставленной до сих пор). Поэтому строка выше не будет работать, но указывает на конечный результат, которого я хотел добиться. Как реальная рабочая запись .REG-файла, пример выше должен быть отображен как:

"SoMeThIng"="%WINDIR%\\system32"

становится

"SoMeThIng"=hex(2):22,25,57,49,4e,44,49,52,25,5c,5c,73,79,73,74,65,6d,33,32,22,00

решение2

12 лет спустя, в Windows 11, нам все еще нужны шестнадцатеричные строки для REG_EXPAND_SZ в .reg-файлах.
Написание команд reg.exe в CMD-файле для этого все еще проще.

Мы также можем сделать следующее при использовании reg.exe через CMD:
разрешить env-varsразвернуть в CMD, поэтому онив реестр вводить как простые строки.
Синтаксис немного проще, так как вы пропускаете ^ перед %
и заключаете в кавычки всю строку. Не забудьте установить тип как REG_SZ.

reg add HKCU\Software\Classes\*\shell\OpenWithNPP\command /t REG_SZ /ve /d "%AllUsersProfile%\apps\npp\notepad++.exe %1"

REG QUERY HKCU\Software\Classes\*\shell\OpenWithNPP\command /s

Результат:

HKEY_CURRENT_USER\Software\Classes\*\shell\OpenWithNPP\command
    (Default)    REG_SZ    C:\ProgramData\apps\npp\notepad++.exe %1

До тех пор, пока вы позже не переместите «известную папку» в другое место,
жестко заданный путь будет продолжать работать.

%AllUsersProfile% — древний, совместимый с XP.
%ProgramData% — эквивалент для использования в наши дни.
Но я делаю это для пользователей Mac, у которых XP в виртуальной машине, чтобы запустить старое приложение. ;)

Фактический путь в XP отличается, но использование этого метода в скрипте cmd
вставляет правильный путь для машины, на которой он запущен.

Связанный контент