본문 바로가기

Slack 채널 정리

bat/cmd 스크립트 작성

bat/cmd 스크립트 작성하면서 기억해둘만한거 초보 팁 몇가지 정리.


1. 여러 스크립트에서 공통으로 사용할 변수값 관리 : 가령 a.bat 에 SET wk_dir=C:\work 와 같이 저장하고 사용할 스크립트들에서 call a.bat 식으로 선언하면 a.bat 에 선언해둔 변수를 사용 가능. 

2. 배치 스크립트 인자 사용 : 너무 기초적인 거지만 a.bat param1 param2 이런 식으로 쓸 때 스크립트 내에서는 %1 %2 로 인자 참조

3. 이전 명령 실행 성공 여부 체크는 if %errorlevel%==0 ( echo 성공 ) else ( echo 실패)

4. 실행 상태의 출력을 로그로 남기려면 > log.txt 식으로

5. 스크립트 내에서 실행을 병렬로 하려면 start 사용. 가령, 
call notepad.exe
call notepad.exe
식으로 하면 첫번째 노트패드 실행 후 그걸 종료해야 새로 노트패드 열림.
start notepad.exe
start notepad.exe
식으로 하면 한꺼번에 노트패드 실행 됨. 탭 지원된다면 여러 탭으로 열림

6. 실행 순차 제어가 필요하다면 start /wait
가령 파일 복사가 다 끝난 후 해당 디렉토리에서 svn 관련 파일/폴더 삭제하려면 이런 식으로 
TeraCopy.exe Copy %PKG_WEB% %WK_DIR%
IF %ERRORLEVEL% == 0 goto DEL_SVN
else goto QUIT:DEL_SVN
cd %WK_WEB%
FOR /F "tokens=" %%G IN ('DIR /B /AD /S .svn*') DO rmdir /S /Q "%%G":QUIT
exit

7. 탐색기에서 bat/cmd 실행 후 실행한 스크립트 창 안닫히고 유지하려면 스크립트 끝에 다음 것들 중 하나 추가.
- pause : 엔터 치면 자동 창 닫힘
- cmd /k : 실행 스크립트 창 그대로 유지.
- timeout /t 5 : 5초 창 유지 후 자동 닫힘.

8. 주석 기능 : rem 을 보통 사용.  : 는 이름 지정용으로 사용되는데 이걸 응용해서 :: 식으로 사용하기도 함.

9. YYMMDD 구하는 방법.
SET YYMMDD=%DATE:~2,2%%DATE:~5,2%%DATE:~8,2%가장 간단한 방법인데 오늘 미주 지역 서버에서 실행해보니 locale 문제 때문에 에러 발생. locale 에 상관없이 가장 안전한 방법은 wmic os get localdatetime 이용하는 법인듯.
그래서, 이걸 하는 방법.
set X=
for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do if not defined X set X=%%x
SET YYMMDD=%X:~2,6%

August 1st, 2017