주요정보통신기반기설 기술적 취약점 분석 평가 방법 상세가이드/Windows 서버 진단

Batch file 명령어 - For 문 정리

재민스 2022. 4. 20. 17:52

윈도우에서 불필요한 계정 제거 항목 점검 시

batch file 명령어 입니다.

FOR /F "tokens=1,2,3 skip=4" %%i IN ('net user') DO (
echo ------------------------------------------------------------------------------- >> 1-03-account.txt 2>nul
net user %%i >> %ktsec%\1-03-account.txt 2>nul
echo ------------------------------------------------------------------------------- >> 1-03-account.txt 2>nul
net user %%j >> %ktsec%\1-03-account.txt 2>nul
echo ------------------------------------------------------------------------------- >> 1-03-account.txt 2>nul
net user %%k >> %ktsec%\1-03-account.txt 2>nul
)

findstr "User active Comment Last --" 1-03-account.txt > 1-03-account_temp1.txt
findstr /v "change profile Memberships User's" 1-03-account_temp1.txt >> %COMPUTERNAME%-result.txt

for 문에 대한 이해가 있어야겠죠 ?

 

for문 

FOR %%변수 IN (집합) DO 명령어      :    변수가 집합 안에 변수가 있으면 명령어를 실행하라

 

변수
  • 변수는 %%변수 형태
  • 대문자와 소문자를 구분
  • 변수는 한글자만 가능
집합
  • (파일명) 또는 ("문자열") 형태
  • 여러개 처리 시 공백, 콤마(,), 세미클론(;)으로 구분 (1;2 3,4)
  • ('명령어')
증감 FOR 문
FOR /L %%변수 IN (시작,단계,끝) DO 명령문
recursive for문
FOR /R [경로] %%변수 IN (집합) DO 명령어
  • 경로에서 recursive 하게 탐색하여 각 디렉토리마다 for 문을 실행
  • 경로 생략 시 현재 폴더에서 탐색
file for문
FOR /F ["옵션"] %변수 IN (집합) DO 명령어
  • 파일 내용을 파싱할 때 주로 사용
  • 한줄 씩 for문을 돌려 파싱
  • 집합이 ('명령어') 일 경우 명령어 결과값을 파싱한다.
  • 파싱하는 규칙은 ["옵션"] 에서 정한다.

 

옵션 

  • delims(delimeters, 구분자) : 문자열을 나누는 기호 문자, 생략시 공백(스페이스,탭)으로 나눈다.
  • tokens : 구분자로 나뉘어진 것을 각각 토큰이라 하며   토큰들과 루프 변수에 1:1로 대응하도록 한다.   
    이 때 루프변수의 다음 알파벳으로 자동 대응된다.
  • skip : 생략할 행 번호 설정
  • eol : 시작 문자로 생략할 행 설정, 생략시 ;(세미클론)으로 시작하는 행은 생략된다.
  • usebackq : 대체 인용, 파일명에 공백이 들어 갈때 문자열로 처리하는걸 막거나 명령문에 특수문자가 들어갈때 오류 방지

Batch 명령어 설명

FOR /F "tokens=1,2,3 skip=4" %%i IN ('net user') DO (

/F  옵션이므로 file for문인 것을 확인할 수 있습니다.

그러므로 파싱을 위하여 옵션이 따라오게 됨을 알 수 있습니다.

tokens =1,2,3 은 공백등의 구분자로 3개로 나눈다는 뜻 입니다.

'net user'  명령에 의하여 다음과 같이 출력됩니다,

(net user 명령어 실행 화면)

각각의 계정을 가져와야 합니다. 

for문에서는 줄 단위로 가져오기 때문에 3개로 열로 나눠져 있으므로 각 열을 구분해야 합니다.

tokens = 1,2,3 은 각 행에서 각 열의 문자열을 가져옵니다.

그러므로 %%i 는 Administrator,  %%j 는 bts, %%k는  DefaultAccount 와 대응됩니다.

그리고 나서 %%i는 다음줄의 Guest, %%j 는 LNSS_MONITOR_USR, %%k는  WDAGUtilityAccount 와 대응됩니다.

DO ( 

net user %%i  

net user %%J

net user %%k

)

와  같이 사용하면 각 계정 하나하나의 계정 정보를 확인 할 수 있게 됩니다.

 

이상~