본문 바로가기
운영체제/Windows

배치 파일 활용하여 윈도우 명령 프롬프트에서 사용할 커스텀 명령어 만들기

by eteo 2024. 8. 2.

 

 

 

1. 커스텀 명령어로 사용할 배치파일들을 모아둘 폴더를 만든다.

 

 

2. 해당 폴더를 환경 변수 path에 등록한다.

내 PC > 속성 > 고급 시스템 설정 > 환경 변수 > 사용자 변수 > path에 값 추가

 

3. 이제 해당 폴더에 <파일명>.bat 파일을 만들어 두면 <파일명>을 커스텀 명령어로 쓸 수 있다.

해당 명령과 일치하는 프로그램이 있는지 path에 등록된 디렉터리를 탐색할거기 때문이다.

 

 

 

 

 

사용예시

 

 

배치파일을 사용해 정말 다양한 기능의 커스텀 명령어를 만들 수 있지만 여기선 한가지 예시를 들어보도록 하겠다. 다음 명령들은 특정 장비와 연동 테스트 목적으로 IP를 계속 바꿨다 돌렸다할 때 유용하게 쓸 수 있다.

 

 

1. 고정 IP로 설정하는 명령

 

ip-static.bat

@echo off

REM 코드페이지를 UTF-8로 변경
chcp 65001 >nul

REM 관리자 권한으로 실행
net session >nul 2>&1
if %errorLevel% NEQ 0 (
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    chcp 949 >nul
    exit /b
)

REM 네트워크 어댑터 이름 설정
set adapter_name="이더넷"

REM 새로운 IP 설정
set new_ip=192.168.0.100
set new_subnet=255.255.255.0
set new_gateway=192.168.0.1

REM IP 주소, 서브넷 마스크, 게이트웨이 설정
netsh interface ip set address name=%adapter_name% static %new_ip% %new_subnet% %new_gateway%

REM DNS 서버 설정
set primary_dns=8.8.8.8
set secondary_dns=8.8.8.4
netsh interface ip set dns name=%adapter_name% static %primary_dns%
netsh interface ip add dns name=%adapter_name% %secondary_dns% index=2

 

 

 

 

2. 유동 IP로 설정하는 명령

 

ip-dynamic.bat

@echo off

REM 코드페이지를 UTF-8로 변경
chcp 65001 >nul

REM 관리자 권한으로 실행
net session >nul 2>&1
if %errorLevel% NEQ 0 (
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    chcp 949 >nul
    exit /b
)

REM 네트워크 어댑터 이름 설정
set adapter_name="이더넷"

REM IP 주소를 자동으로 받아오도록 설정
netsh interface ip set address name=%adapter_name% source=dhcp

REM DNS 서버를 자동으로 받아오도록 설정
netsh interface ip set dns name=%adapter_name% source=dhcp

 

 

유선 네트워크 어댑터 이름이 보통 한글로 설정되어있어서 한글을 써야 하는데 명령 프롬프트의 문자 인코딩(코드 페이지)는 기본이 949로 설정되어있기 때문에 한글이 깨지지 않도록 신경써줘야 한다.

 

방법은 두가지가 있는데 텍스트 편집기를 통해 배치파일을 저장할 때 인코딩을 UTF-8이 아니라 ANSI로 하는 방법이 있고, 또 다른 방법은 위 스크립트 처럼 배치파일 첫 줄에 코드페이지 설정을 바꿔주는 것이다.

 

여기서 >nul은 명령 실행 결과를 화면에 출력하지 않도록 하는 리다이렉션 연산자이다.

chcp 65001 >nul

 

 

 

다음 명령은 현재 배치 파일이 관리자 권한으로 실행되었는지 확인하고, 그렇지 않으면 관리자 권한으로 다시 실행하도록 하는 코드이다.

 

net session >nul 2>&1
if %errorLevel% NEQ 0 (
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    exit /b
)

 

  • net session >nul 2>&1: 현재 세션 정보를 조회하여 관리자 권한으로 실행 중인지 확인한다. net session 명령은 관리자 권한이 없으면 오류가 발생한다.
  • if %errorLevel% NEQ 0: 만약 관리자 권한이 아니라면(errorLevel이 0이 아닌 경우) 괄호 안의 코드를 실행한다.
  • powershell -Command "Start-Process '%~f0' -Verb RunAs": 파워셸을 사용하여 현재 배치 파일('%~f0')을 관리자 권한으로 다시 실행한다.
  • exit /b: 현재 배치 파일을 종료한다.

즉, 배치 파일이 처음 실행될 때는 관리자 권한이 없어서 배치 파일을 관리자 권한으로 다시 실행한 뒤 현재 배치파일은 종료할거고, 관리자 권한으로 재실행 된 배치파일은 if문 수행 없이 아래 코드가 실행될거다.