![Windows 레지스트리의 명령에 %USERPROFILE% 추가](https://rvso.com/image/1314324/Windows%20%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC%EC%9D%98%20%EB%AA%85%EB%A0%B9%EC%97%90%20%25USERPROFILE%25%20%EC%B6%94%EA%B0%80.png)
새 VM을 만들거나 노트북을 다시 만들 때 일부 설정 작업을 간소화하는 레지스트리 해킹을 작성하려고 합니다. 제가 하고 있는 일 중 하나는 Notepad++를 포함하여 제가 가장 좋아하는 여러 앱의 휴대용 버전(Dropbox에 동기화됨)으로 전환하는 것입니다.
휴대용 버전에서 누락된 유일한 항목인 오른쪽 클릭 메뉴에 메모장++로 열기 옵션을 사용할 수 있도록 레지스트리 항목을 만들고 싶습니다. 하지만 오류가 발생합니다.
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
여기서는 이식성을 고려하겠습니다.
문제는 기호에 대한 올바른 이스케이프 시퀀스를 찾는 것이라고 확신 %
하지만 말하기는 어렵습니다.
제안?
편집: 나는 명령 옵션을 사용했고 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 /?
이 구문에 대한 자세한 내용은 을 참조하십시오 .
데이터를 16진수로 인코딩할 수도 있습니다. 그에 대한 몇 가지 예가 있습니다.여기:
REG_EXPAND_SZ
데이터는 MS가 부르는 방식으로 제시되어야 합니다.바이너리데이터 유형(하위 유형 "2")이므로 값은 일종의 16진수 형식, 쉼표로 구분, 바이트당 2개의 토큰(0으로 채워짐)으로 형식화되어야 하며 물론 null 바이트로 종료됩니다(자세한 설명은 분명히 멀었습니다). 이 기사의 범위를 벗어나며, 저자는 지금까지 제공된 불완전한 정보의 오용에 대해 책임을 지지 않습니다. 따라서 위의 줄은 작동하지 않지만 달성하려는 최종 결과를 나타냅니다. 실제 작동하는 .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 파일의 REG_EXPAND_SZ에 대한 16진수 문자열이 여전히 필요합니다.
CMD 파일에 reg.exe 명령을 작성하는 것이 여전히 더 쉽습니다.
CMD 를 통해 reg.exe를 사용할 때 다음을 수행할 수도 있습니다.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%는 요즘 사용하는 것과 동일합니다.
하지만 VM에 XP가 있는 Mac 사용자가 오래된 앱을 실행하는 경우에는 이 작업을 수행합니다. ;)
XP에서는 실제 경로가 다르지만 cmd 스크립트에서 이 방법을 사용하면
실행되는 시스템에 대한 올바른 경로가 삽입됩니다.