블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
2007. 2. 7. 23:23 Programing

달룟님께 선물할 Smalltalk 이미지 백업 배치파일


@echo off

SETLOCAL

SET ST_IMG_HOME=F:\작업자료\프로그램\smalltalk\가계부
SET ST_BACKUP_DIR=F:\작업자료\프로그램\smalltalk

SET BACK_NAME=
  FOR /F "tokens=1,2,3 delims=-" %%i IN ("%DATE%") DO SET BACK_NAME=%%i_%%j_%%k
  FOR /F "tokens=1,2,3 delims=: "  %%i in ('time /t') DO SET BACK_NAME=%BACK_NAME%_%%i_%%j_%%k.zip

alzip -a "F:\작업자료\프로그램\smalltalk\가계부\Community Edition.img","F:\작업자료\프로그램\smalltalk\가계부\Community Edition.sml","F:\작업자료\프로그램\smalltalk\가계부\Community Edition.chg" "F:\작업자료\프로그램\smalltalk\%ST_BACKUP_DIR%.zip"

ENDLOCAL



나도 알집을 쓰고 달룟님도 알집을 쓰신다고 해서 알집을 사용했는데 초반에 고생을 좀 했다.

퇴근 후 집에 와서 코딩을 했는데 집에 설치된 알집은 5.6버전이었다.
알집의 도움말을 통해서 커맨드라인 옵션을 보고 당연히 되겠구나 해서 코드를 짰는데 에러가 발생하였다...
아니 정확히 말하면 에러는 아니다. 화면에 아무 에러도 뱉어 내지 않았으니까.
단지 아무일도 일어 나지 않았다.
알집이 잠깐 떴다 바로 사라졌지만 디렉토리에 새로 생긴 압축파일이 안보이는 것이다.
몇번 더 테스트를 해보다 알집 최신 버전을 설치 하고 다시 테스트를 했더니 제대로 된다 -_-;;
오후에 서핑중에 보았던 알집에 대한 비판글이 조금은 이해가 됐다;;


이번 스크립트로 변수를 좀더 자유롭게 다룰수 있게 되었다.
정말정말 날 힘들게 했던 부분은 공백을 걸고 넘어지는 문제였다.

SET ST_IMG_HOME = FOR ~~~~
echo %ST_IMG_HOME%

이 코드가 에러를 뱉어 내는 이유를 한참 후에 알게 되었다.
'=' 양 옆의 공백이 문제였던 것이다....Orz=3
지금껏 내가 만져본 언어들 중에서 이 문제로 까다롭게 굴었던건 없었다....
이 녀석이 처음이다.... 역시 처음은 강렬하게 다가온다.....쩝...


SETLOCAL과 ENDLOCAL은 한쌍으로
SET으로 선언된 환경 변수를 지역변수로 제한하는 기능을 한다.
만약 SETLOCAL이 없으면 스크립트 실행 후 커맨드라인에서 SET 명령으로 현재 설정된 환경 변수를 보면
스크립트에서 지정한 환경변수가 그래도 살아있음을 확인 할 수 있다. 하지만 그 역시 콘솔을 닫아버리면 사라진다.



추가정보:

프롬프트에서 c:\>help 를 실행하면 사용할 수 있는 명령어들이 나오는데
c:\>cmd /? 를 실행하면 또다른 신선한 내용들이 나온다.

'Programing' 카테고리의 다른 글

스크립트언어의 재발견  (0) 2007.03.09
[펌]포인터  (0) 2007.02.22
윈도우 스크립팅 걸음마  (3) 2007.02.07
euc인코딩  (0) 2007.01.09
위기지학(爲己之學)  (0) 2006.11.29
posted by 초딩입맛제주아재
2007. 2. 7. 16:45 Programing

퇴근하기전 매일매일 엑셀을 이용해서 업무일지를 쓴다.
정말 하기 싫은 작업이다...
엑셀을 실행하고 어제 작성한 업무일지를 불러와서 어제 뭘했나 대충 살펴보고
날짜를 오늘 날짜로 수정한뒤 내용을 싸그리 지우고 오늘 작업한걸 써 나간다.
다 쓰고 새이름으로 저장하기 버튼을 클릭해서 업무일지070207.xls 처럼 날짜로 네이밍을 해서 저장한다.
그런데 가끔 정신이 나갈때면 editplus 에서 하던 버릇이 나와서 Ctrl + S 를 눌러서 어제 작성한 업무일지에
덮어써버리곤 한다.

오늘도 역시 그랬다. -_-;;
어제의 기억은 흔적조차 남지 않게 되었고 인쇄한 업무일지를 잃어버리게 되면
어제 나는 한일이 없게 되는 것이다.

언제까지 이렇게 방치해둘 순 없었다.
그래도 명색이 프로그래머 아닌가.
뭔가 이 비 생산적인 굴레를 벗어날 길이 없을까 고민하다 도스시절을 회상하며 배치파일을 만들기로 했다.

전에 달룟님과 대화중 smalltalk 이미지 백업하는걸 배치파일로 만들어보고자 했던 기억도 있고
뭔가 새로운걸 해보고 싶던 찰나에 이번 프로젝트(?)는 운명적인 것이리라.

kldp에서 스크립팅에 관련한 자료를 찾았다. >>kldp스크립팅자료

bash쉘에 관련된 내용이지만 도스 배치파일에 대한 이야기도 살짝 나온다.
덕분에 bash쉘 스크립팅을 공부해야할 이유가 생겼다.

배치파일 소스는 아래와 같다.


@echo off

IF NOT EXIST %DAILY_REPORT_HOME%업무일지%DATE:~2,2%%DATE:~5,2%%DATE:~8,2%.xls (
  FOR /F %%i IN ('DIR %DAILY_REPORT_HOME% /B /AA /O-D') DO (
       copy %DAILY_REPORT_HOME%%%i %DAILY_REPORT_HOME%\업무일지%DATE:~2,2%%DATE:~5,2%%DATE:~8,2%.xls > NUL
       goto end
  )
)

:end

문법이 참 적응하기 어려웠지만 12살때 배웠던 GW-BASIC도 생각이 나고
하면서 '참 재밌다!!' 라는 생각을 했다.


소스 풀이를 하자면.....

환경변수로 등록된 업무일지 디렉토리(%DAILY_REPORT_HOME%)안에

오늘 날짜로 된 파일(업무일지%DATE:~2,2%%DATE:~5,2%%DATE:~8,2%.xls)이 없으면

가장 최근의 업무일지('DIR %DAILY_REPORT_HOME% /B /AA /O-D' 의 결과중 맨 처음것)를

오늘 날짜로 복사(copy %DAILY_REPORT_HOME%%%i %DAILY_REPORT_HOME%\업무일지%DATE:~2,2%%DATE:~5,2%%DATE:~8,2%.xls > NUL)

한다......휴~


가장 어려웠던 부분은 최근 파일명 추출이었다.
변수 운용하는 방법을 모르고 (환경변수가 아닌 지역변수 개념의.. 가능한지 모르겠다)
dir 의 결과중 첫라인 또는 마지막라인 만 리턴하는 방법(이건 꼭 알고 싶은데...있을것 같기도 하고..)


그래서 생각한 것이 FOR, 반복문이다.
DIR {디렉토리} /B /AA /O-D 는 {디렉토리}에 있는 순수한 파일(/AA)만을 출력해준다.
물론 쓸데없는 header 와 footer 도 없다(/B). 오로지 파일명만 역순(/O-D)으로 출력해준다.
이 결과물을 가지고 FOR문을 돌리는데
제일 처음 값만 출력하고 바로 :end(goto end)로 가버리고 반복문은 중지된다.

이 배치파일은 내가 출근한후 PC를 켜고 윈도우가 로딩되면 실행되도록

모든 프로그램 > 보조프로그램 > 시스템도구 > 예약된 작업  으로 등록을 해두었다.

내일 아침 출근후 확인해 보는일만 남았다...

THE END...



컴퓨터는 사람을 편하게 하기 위해 만들어진 기계이다.
하지만 요즘은 컴퓨터로 인해 스트레스 받는 사람들이 더 많고
컴퓨터때문에 해야 할 일들이 더 많아지고 있다.

사소한것 하나라도 편하게 바꿔보자!!
그것이 개발자들이 해야할일이 아니겠는가??


'Programing' 카테고리의 다른 글

[펌]포인터  (0) 2007.02.22
윈도우 스크립팅 맛들이기 - Smalltalk 이미지 파일 백업 배치파일  (2) 2007.02.07
euc인코딩  (0) 2007.01.09
위기지학(爲己之學)  (0) 2006.11.29
Drag & Drop로 구현한 쇼핑몰 샘플  (0) 2006.11.09
posted by 초딩입맛제주아재
prev 1 next