코딩 관련/기타
[Windows] batch 파일에서 cmd 결과 변수에 저장하기
메리짱123
2020. 12. 18. 02:15
반응형
netstat 조회 결과 중 pid 값을 taskkill 명령어에 써먹는 batch파일을 만들려고 함
1. netstat 명령어 실행 -> 결과 중 3148 을 변수에 저장하려고 함
C:\Users>netstat -ano | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 3148
TCP [::]:8080 [::]:0 LISTENING 3148
2. 변수에 3148을 대입하는 명령어
1) %a 변수에 netstat 결과 중 3148을 넣는다
2) result 변수에 %a를 대입한다
for /f "tokens=5 delims= " %a IN ('netstat -ano ^| findstr 8080') do set result=%a
tokens : 결과에서 몇 번째를 저장할 지 설정
delims : 구분자
"tokens=5 delims= " : 공백을 구분자로 다섯번째 문자열을 선택(3148)
%a : 임시로 쓸 변수
result : 명령어 저장할 변수
in ( ) : 실행할 명령어를 넣는다.
do() : 앞의 명령어 실행 후 실행할 내용
* 명령어에 ' | ' 나 ' ( ' 같은 특문이 있으면 앞에 ^를 붙일 것
* 변수 세팅시 ( set 변수=%a) 공백 없도록
* batch파일에 적을 때에는 %a에 %를 하나 더 붙인다
cmd에 실행한 예시
netstat 결과가 두줄이라 그런지... set result가 두 번 실행됨..
C:\Users\heirr>for /f "tokens=5 delims= " %a IN ('netstat -ano ^| findstr 8080') do set result=%a
C:\Users\heirr>set result=3148
C:\Users\heirr>set result=3148
C:\Users\heirr>echo %result%
3148
반응형
batch 파일 내용(test.bat)
//batch 파일을 관리자로 실행하기 위해 넣었음
if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
cd ../
for /f "tokens=5 delims= " %%a IN ('netstat -ano ^| findstr 8080') do set result=%%a
//result 변수를 taskkill 명령어에 사용
taskkill /f /pid %result%
//batch 파일로 실행한 cmd가 자동종료되지 않게 하기 위함
cmd /k
반응형