반응형
환경변수 문자열 안의 환경변수가 있는 경우 처리하는 방법
[원하는 상황]
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%
|
[결과]
정상적으로 이동됨.
반응형
'OS > Windows' 카테고리의 다른 글
batch script - for문 문자열 추출 (tokens, delims) (1) | 2022.04.07 |
---|---|
batch script - START와 CALL의 차이점 (0) | 2022.04.07 |
batch-script Registry value 값 확인 결과 변수에 저장하는 방법 (0) | 2022.04.07 |
batch script - Registry value 값 확인 결과 파일에 저장 (0) | 2022.04.07 |
batch script - error message 출력안하는 설정 (0) | 2022.04.07 |