FileNameLIST추출.BAT
CMD(스크립트).LSP
;스크립트는 단순 반복작업을 쉽게 해결하기 위한 것입니다.
;수십 수백장의 도면에 모두 같은 명령을 적용시킬때 많이 사용합니다.
;명령어는 캐드 내부 명령은 물론이고 리습 명령어 (start suite-일명서류가방에 들어있어야 함) 도 됩니다.
;아래 리습을 실행 해보면 D:\SCR\[사용자입력폴더명] 안에 command.scr파일이 생성됩니다.
;그 파일을 메모장으로 열어보면 스크립트 파일을 어떻게 작성해야 실행이 되는지 알 수 있을 겁니다.
;open [경로\파일명] [실행 명령어들] [save관련] [저장경로\파일명]...대충 이런식입니다.
;실행 명령어들에서 한칸(공백)은 실제 캐드 명령창에서 엔터를 의미합니다.
;그렇기 때문에 change명령이나 layer명령등 계속해서 서브명령들을 입력해야 하는 경우 빼먹지 않도록 주의해야 합니다.
;그렇지 않으면 스크립트가 실행도중 다른 명령이 먹히게 되서 멈춰버리거나 원치 않는 결과가 나올수 있습니다.
;==============================================================================================================================
1. 아래와 같이 공통적인 경로명과 실행될 명령어들을 입력
![](https://t1.daumcdn.net/cfile/cafe/111DA4214B81E138C4)
2. FileNameLIST추출.BAT 더블 클릭 > list.txt open > 도면 리스트 복사 > 엑셀에 붙여넣기
![](https://t1.daumcdn.net/cfile/cafe/144E431F4B81E314D0)
3. CONCATENATE함수를 이용해서 B1과 C1, E1과 F1의 셀 내용을 합친다.
![](https://t1.daumcdn.net/cfile/cafe/174F131F4B81E3F684)
4. 함수로 나온 값들을 선택하고 마우스 우클릭으로 선택하여 붙여넣기 선택, 기존 B1과 C1, E1과 F1의 셀 내용을 바꾼다.
![](https://t1.daumcdn.net/cfile/cafe/171D7D234B81E4C1AF)
![](https://t1.daumcdn.net/cfile/cafe/181E51234B81E4B101)
![](https://t1.daumcdn.net/cfile/cafe/191E51234B81E4B102)
5. 새 메모장을 열고 위 값들을 복사해서 붙여 넣고, 먼저 각 줄의 맨끝의 공백들을 없애고 탭들을 공백으로 바꾼다.
![](https://t1.daumcdn.net/cfile/cafe/1945CB214B81E65A01)
![](https://t1.daumcdn.net/cfile/cafe/2045CB214B81E65A02)
6. 맨 끝줄에 quit을 입력하고 확장자명을 scr로 저장한다.
![](https://t1.daumcdn.net/cfile/cafe/1777B81F4B81E7872C)
7. 캐드 명령창에서 scr을 입력하고 위에서 만든 scr파일을 선택하면 된다.
;==============================================================================================================================
;이렇게 스크립트를 수동으로 작성을 하려다 보면 귀찮기도 하고 만드는 시간도 녹록치 않습니다.
;그래서 아래와 같이 실행 명령어만 치면 간단하게 스크립트가 생성되고 바로 실행되도록 리습을 만들어 사용하고 있습니다.
;리습 사용할때 참고
; 1. "D:\SCR" 이부분을 조정해서 원하는 폴더로 변경
; 2. 스크립트를 실행하다 에러가 나서 종료된 경우 command.scr파일을 열어서 어느 부분이 잘못되었는지 확인 할 것
; 3. command.scr에 문제가 없는데 실행이 안되는 경우는 도면에 문제가 있는 경우임
; 4. 싱글모드, 시스템변수 sdi=1로 실행할 것
;※ 아래 리습은 저희 회사 팀장님이 만드신걸 제가 주석만 달아논 것입니다.
;==============================================================================================================================
;*EDIT BY TEAM*
;2010.2.21.Comment by Kwon.(아키모아)
;; http://cafe.daum.net/archimore
(setvar "regenmode" 0) ; 처음 열기에서 "y" 인자 지정
(setvar "sdi" 1) ; 싱글모드로 스크립트 활성화
(defun c:CMD(/ di cm fs path fnl i scn fd first) ; 명령어를 입력받아 스크립트 실행 *EDIT BY TEAM*
(setq di (getstring "\n저장폴더 이름을 입력하세요 : ")
;도면이 저장될 폴더명 입력 (D:\SCR\[입력된 폴더명])
cm (getstring 2 "\n명령어를 입력하세요 : ")
;각 도면마다 실행할 공통된 명령어 입력 (ex.[audit y (repeat 3 (vl-cmdf "purge" "all" "*" "n")) lfd zoom e]) => (audit, purge 3번, 레이어필터제거, zoom extend)
fs (getfiled "CMD 작업할 폴더내 도면을 선택하세요." "D:\\" "dwg" 4)
;스크립트를 실행할 도면들이 있는 폴더를 찾아서 아무 도면이나 선택
path (vl-filename-directory fs)
;선택한 도면이 있는 폴더 경로
fnl (vl-sort (vl-directory-files path "*.dwg" 0) '<)
;선택한 도면이 있는 폴더내 도면 리스트 정렬
i 1)
(vl-mkdir "D:\\SCR")
;폴더 생성
(vl-mkdir (strcat "D:\\SCR\\" di))
;사용자가 입력한 폴더 생성
(setq scn "D:\\SCR\\Command.scr"
;생성될 스크립트 파일
fd (open scn "w")
;command.scr파일 열기
first (nth 0 fnl))
;도면 리스트중 첫번째 도면
(princ (strcat "Open y " "\"" path "\\" first "\"" " " cm " saveas 2000 " "\"" "D:\\SCR\\" di "\\" first "\"" "\n") fd)
;첫번째 도면에 사용자 입력 명령어들을 command.scr파일에 기록
(repeat (1- (length fnl));첫번째 도면이 실행되었으니 리스트 갯수에서 하나 뺀 만큼만 반복
(setq first(nth i fnl);두번째 도면부터
i (1+ i))
(princ (strcat "Open " "\"" path "\\" first "\"" " " cm " saveas 2000 " "\"" "D:\\SCR\\" di "\\" first "\"" "\n") fd))
;두번째 도면부터 각 도면에 실행될 사용자 입력 명령어들을 순차적으로 command.scr파일에 기록
(princ (strcat "Quit" "\n") fd)
;반복이 종료되면 command.scr파일 맨 마지막에 Quit명령 추가 기록 (맨마지막 도면을 닫기 위함)
(close fd)
;열려있던 스크립트 파일 닫기
(vl-cmdf "script" scn)
;사용자 입력 명령어 기록이 완료된 command.scr 스크립트파일 실행
)
첫댓글 앗~권과장님...증말 넘넘 고맙습니다^^*
이글 엄청 기둘리고 있었다는..^^* 오예~~ ㅎㅎ
우아 수고하셨습니다^^*
우와~~이거 증말 예술입니다요^^* ㅎㅎ
아..혹시 모르니 리습 맨 윗줄에 (vl-load-com)추가하세요. 그리고 저장될 캐드 버전을 수정하고 싶다면 2000을 바꾸시면 됩니다.
캐드 버전은 캐드 명령창에서 filedia=0으로 하고 saveas를 눌렀을때 r13, r14, 2000....이렇게 나오는 부분을 확인 하시면 됩니다.^^
넵^^*
감사합니다^^
스크립트는 사용을 안해보았는데 유익한 정보네요^^
고맙습니다. 뚫어져라 봐야겠네요...^^;
음..나름...쉽게 설명한다고 캡쳐도 하고 그랬는데...글재주가 없어서리...설명이 잘 됐나 모르겠네요.
하지만...저 역시 스크립트 실행 방법을 몰라 처음에 많이 해맸습니다. 숙달이 안된 분들은 저처럼 헷갈리고 이해가 잘 안가실 것 같네요.^^;;
그래도 뚫어져라 보시면...언젠간 이해가 될겁니다.^^;;;
그리고 위에 무식한 방법으로 스크립트를 만드는 방법을 먼저 알고 있어야...밑에 간단하게 리습으로 스크립트를 돌릴때 에러가 나면 원인을 쉽게 찾을 수가 있을 겁니다.^^
넵..잘 알겠습니다.권과장님^^* ㅎㅎ
고맙습니다. 뚫어져라 봐야지...^^
대단하네요..그때그때 만들어 쓰긴 했지만, 리습으로 스크립트 작성을 자동생성하는 것은 후.....훌륭합니다!!
감사합니다.....
고맙습니다,,
유용하게 사용하겠습니다.정말 감사합니다^^
우와~감사합니다~
감사합니다.. 잘받아서 지금 활용하는데... 한장만 실행되고 다음장 실행이 안되요... 명령어실행시 엔터(확인) 를 두번 쳐서 한장이 실행되는데 다음장 오픈까지 되고 끝나더라고요.. 스크립트에서 공백이 엔터기능이라고 하셨는데... 공백 2개면 엔터 2번 아닌가요?? 무식한 질문인지 모르겠지만 답변 부탁드립니다.
스크립트를 돌릴 도면중 한도면에서 해당 명령어를 그대로 해보세요. 공백이 엔터가 맞습니다만 그대로 해봤을때 순서가 틀렸거나 다른 명령이 실행된다거나 여러가지 이유가 있을 수 있습니다.^^
리습만으로 여러도면을 수정할 수 있꾼요.. 대단하십니다. _ _)
앗~~ 감사합니다... 권과장님 바로 옆에 있어도 워낙 바빠서 카페 보고 했네요..^^;; 결국 마지막은 물어봤지만서도...
감사합니다..^^
스크립트 짜실때 아크로에디터 라고 무료 프로그램이 있는데 열편집이 가능해서 참 좋습니다.. 파일이름은 cmd 창에서 dir >1.txt 식으로 가져오시면 되구요
유용한 프로그램 고맙습니다
초보자라서 그런지 힘드내요..ㅠㅠ
감사 감사
감사합니다.
스크립트라는건 생소하네요. 정말 프로그램 언어같기도 하구요
감사합니다 차근차근해봐야겠어요