#TIL #batch 확장자 bat, cmd는 어떤 차이가 있는 걸까?
cmd가 최신. 호환성을 끊고 새로운 기능을 추가하려고 bat가 아닌 새로운 확장자를 추가한 것 같다. %ERRORLEVEL%
변수 세팅 정책이 다른 건 주의해야 한다.
@ECHO off dir __ghost__ 1>2 2>NUL ECHO error level #1 = %errorlevel% SET a=10 ECHO error level #2 = %errorlevel%
C:\>test.bat error level #1 = 1 error level #2 = 1
C:\>test.cmd error level #1 = 1 error level #2 = 0
bat 확장자 스크립트는 에러일 때만 %ERRORLEVEL%
변수에 값을 할당한다. 반면 cmd 확장자 스크립트는 에러가 아니라도 %ERRORLEVEL%
변수에 값을 할당한다.
cmd 확장자 방식이 맞는 것 같다. 바로 전 명령어 에러값을 반영하기 때문. 하지만 bash처럼 에러 발생 시 바로 리턴해버리는 set -e 명령어가 없다. 그래서 %ERRORLEVEL%
값을 처리 안 하면 계속 남아있는 bat 확장자 방식이 에러 스노우볼링 방지에 유리하다. 특히 jenkins에서 batch script 빌드 스텝을 사용한 경우.
지금은 bat 확장자 스크립트로도 아무런 불편함이 없지만, 추가 기능이 필요한 때가 올 것이다. 그때 cmd로 가느니 지금 cmd로 통일해서 간다. 주의할 점을 알았으니 가도 괜찮다.