이쿠의 슬기로운 개발생활

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

OS/Windows

batch script - for문 문자열 추출 (tokens, delims)

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

 

 
 

for문 문자열 추출 (tokens, delims)

 

원하는 상황

test.log 파일의 내용은 아래와 같음
<virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
<virtualDirectory path="/" physicalPath="C:\test" />
여기서 
"%SystemDrive%\inetpub\wwwroot"
"C:\test"
문자열을 추출하는 것이 목표임.
 
 

[token 문법]

FOR 구문은 각 행별로 분석하는데 
이때 token은 각 행의 몇 번째 문자열을 전달해줄지 지정함.
문자열의 기본 구분단위는 공백임.
for /f "tokens=3" %%a in ('type test.log') DO(
echo %%a
)
 
[예제]
tokens 설정을 1로 하는 경우 결과 = <virtualDirectory
tokens 설정을 2로 하는 경우 결과 = path="/"
tokens 설정을 3으로 하는 경우 결과 = physicalPath="C:\test"
tokens 설정을 3으로 하는 경우 결과 = />
tokens 설정을 *로 하는 경우 결과 = <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
 
와 같이 tokens의 의미는 공백을 기준으로 문자열을 나눔.
 
 

[delims문법]

token이 공백으로 구분했다면
delims는 지정한 구분 문자로 구분함
모든 문자를 구분 기호로 사용할 수 있고 대소문자를 구분함.
구분 기호를 지정하지 않으면 기본적으로 "delims=<tab><space>"로 설정됨.
일반적으로 tokens 설정과 같이 사용됨.
delims 기준으로 분할된 문자열 중 tokens에 해당하는 문자열을 리턴함
for /f "tokens=3 delims='='" %%a in ('type test.log') DO(
echo %%a
)
 
 
[예제]
(tokens 설정: 3 delims 설정: '=') 
for /f "tokens=3 delims='='" %%a in ('type test.log') DO(
echo %%a
)
 
(결과)
"%SystemDrive%\inetpub\wwwroot" />
 
(이유)
test.log 파일의 내용은 아래와 같은데
<virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
<virtualDirectory path="/" physicalPath="C:\test" />
delims를 통해 '='으로 구분하면 
1 = <virtualDirectory path
2 = "/" physicalPath
3 = "%SystemDrive%\inetpub\wwwroot" />
으로 구분됨.
이 중 tokens=3 으로 설정되어 3번째 항목을 출력하니
"%SystemDrive%\inetpub\wwwroot" /> 가 출력됨
 
2번째 line은 "C:\test" /> 가 출력됨.
 
[예제]
(tokens 설정: 4 delims 설정: '=/') 
for /f "tokens=4 delims='=/'" %%a in ('type test.log') DO(
echo %%a
)
 
(결과)
"%SystemDrive%\inetpub\wwwroot" 
 
(이유)
test.log 파일의 내용은 아래와 같은데
<virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
<virtualDirectory path="/" physicalPath="C:\test" />
delims는 여러 문자를 설정 할 수 있음 
delims통해 '=''/'로 구분하면 
 
1 = <virtualDirectory path
2 = "
3 = " physicalPath
4 ="%SystemDrive%\inetpub\wwwroot" - 끝에 띄어쓰기 있음
5 =>
으로 구분됨.
이 중 tokens=4 으로 설정되어 3번째 항목을 출력하니
"%SystemDrive%\inetpub\wwwroot"  가 출력됨
 
2번째 line은 "C:\test" 가 출력됨.
 
 

[tokens와 delims를 함께 사용해서 결과 도출]

(tokens 설정: 4 delims 설정: '=/') 
for /f "tokens=4 delims='=/'" %%a in ('type test.log') DO(
echo %%a
)
 
(결과)
"%SystemDrive%\inetpub\wwwroot" 

 

반응형