이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

OS/Windows

batch script - 환경변수 문자열 안의 환경변수가 있는 경우 처리하는 방법

이쿠우우 2022. 4. 7. 20:43
반응형
 

환경변수 문자열 안의 환경변수가 있는 경우 처리하는 방법

 
[원하는 상황]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp 경로의 
InstallPath value가 가리키는 경로로 이동하고 싶음.
 
[문제가 되는 상황]
다음과 같은 batch script를 사용함
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp" /s | find /I "InstallPath" >> test.log
for /f "tokens=3" %%a in ('type test.log') DO set var=%%a
del test.log
cd %var%
실행시키면 아래와 같이 오류가 발생함

 

해당 script는 아래 image와 같이 InstallPath value를 가져와서
var 변수에 "%windir%system32\inetsrv" 값을 저장함

 

 
그 다음 cd %var% 명령을하면 존재하지 않는 경로라며 이동이 안됨.
 
원인은 호출 자체를 cd %var% 와 같이 환경변수 값을 호출해서 이동을 시도하는데
해당 %var% 값 내부에 또 환경변수인 %windir%이 있음.
즉 환경변수 값 내부에 또 환경변수 값이 들어가 있어서 경로 이동 시 "%windir%" 이름의 경로를 찾으니
존재하지 않는 경로라서 이동하지 못함.
 
 
 
[해결책]
CALL을 사용하면됨
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp" /s | find /I "InstallPath" >> test.log
for /f "tokens=3" %%a in ('type test.log') DO set var=%%a
del test.log
CALL cd %var%
 
 
[결과]
정상적으로 이동됨.

반응형