본문 바로가기

wif LiNoUz/SERVER

배치파일 명령어 모음

 

http://snoopybox.co.kr/1404

 

http://yong40.tistory.com/112

 

http://pcycom.com.ne.kr/hanmir/dos/dos/dir.htm (dir 세부)

 

snoopybox
 

 

Blog
Notice
Taglog
 Guestbook
Admin
RSS
Twitter
 

 


배치파일 기초 작성법

2010/09/29 16:54 | 윈도우 일반


 

 


예전부터 한번 정리하려고 했는데 시간이 많이 걸리는 일이라 차일피일 미루다 오늘에야 올려봅니다. 처음에는 간단히 작성하려고 했는데 쓰다보니 글이 꽤 길어지더군요. 관심있는 분들만 읽어보세요. 여기서 다루는 내용을 완벽히 이해하시면 배치파일의 고수까지는 아니더라도 적어도 제가 활용하는 만큼은 만드실 수 있을 겁니다.
 

 

도움말 활용하기
 
일단 잘 모르는 명령어가 있다면 도움말을 통해 기능을 익혀야겠지요. 사실 저는 이 배치파일을 거의 도움말을 통해 혼자서 익혔습니다. 예전에 어떤 분이 댓글로 저보고 배치파일을 진짜 잘 짠다고 하셨는데, 저도 어차피 도움말 보면서 익힌 것이니까 누구든지 도움말을 잘 이해하면 충분히 훌륭한 배치파일을 만들 수 있다고 생각합니다. 그런데 경우에 따라 도움말이 별로 친절하지 않을 수도 있습니다. 하지만 처음에는 이해되지 않던 말들도 시간이 지나고 경험이 쌓이면 나중에 다시 봤을 때 이해되는 경우가 많습니다. 예전에는 제가 FOR 구문의 대체 변수 참조 확장을 잘 이해하지 못했는데, 최근에는 잘 이해하게 되었습니다. 여러분도 이 도움말을 적극적으로 활용해보세요.
 
일반적으로 해당 명령어 뒤에 /? 를 붙이면 도움말이 나옵니다. 예를 들어 FOR 반복문의 사용법이 궁금하다면 FOR /? 해보면 되겠지요. 또는 HELP FOR 하셔도 동일한 결과를 얻을 수 있습니다. 그런데 도움말이 길면 스크롤 압박이 있으니 이 경우 도움말을 텍스트 파일로 저장해서 보셔도 되겠습니다. 뒤에 > 파일.txt 적어주시면 출력 결과를 텍스트 파일로 저장해줍니다.
 
예제)
 FOR /? > "FOR 사용법.TXT"
 

 

ECHO
 
ECHO는 글자 그대로 메아리를 뜻하는데, 화면에 메시지를 그대로 출력해줍니다. 배치파일에선 사용자에게 뭔가 설명해줘야 하는 부분이 많은데 이럴 때 ECHO를 활용합니다. 주로 SET, IF, GOTO 등과 결합해서 메뉴를 보여줄 때 많이 사용하지요.
 
 예제)
 ECHO 저는 에코입니다. 화면에 메시지를 보여주기 위해 사용되지요.
 
그런데 보통 배치파일 첫 줄에는 @ECHO OFF를 많이 적어줍니다. 만약 @ECHO OFF를 적어주지 않으면 각 명령줄을 화면에 그대로 한번 출력을 해주고 실행을 하기 때문에 화면이 많이 지저분해집니다. 그래서 보통은 배치파일의 첫 줄에서 ECHO를 OFF 시켜줍니다.
 
이 ECHO 명령어 역시 출력 결과를 텍스트파일로 저장할 수 있습니다. (리디렉션은 거의 모든 경우에 사용할 수 있습니다.) 예를 들어 DISKPART를 사용하는 경우 배치파일에선 DISKPART 다음줄부터 작동하지 않는데요, 이럴 때는 DISKPART 다음줄부터 사용될 명령어를 스크립트로 저장한 다음 DISKPART /S 스크립트 이렇게 사용해야 합니다.
 
예제)
 @echo off
 pushd %~dp0
 echo create vdisk file=d:\test.vhd type=expandable maximum=20480 > test.txt
 echo attach vdisk >> test.txt
 echo create partition primary  >> test.txt
 echo format quick fs=ntfs >> test.txt
 echo assign letter >> test.txt
 echo exit >> test.txt
 diskpart /s test.txt
 exit
 
위 예제가 무슨 소린지 아직은 잘 이해되지 않을 수도 있는데, 아무튼 echo와 리디렉션을 활용하여 텍스트파일로 출력하는게 가능하기 때문에 배치파일 안에서 이렇게 새로운 배치파일이나 스크립트를 echo만을 사용하여 작성할 수 있습니다. 위 예제는 윈도우 7에서 D 드라이브에 TEST.VHD 파일을 자동으로 생성하는 기능을 합니다.
 

※ ESCAPE 문자
 제가 한가지 빠트려서 보충합니다. echo로 리디렉션을 할때 만약에 >> 기호 역시도 echo의 일부분으로 포함시키고 싶다면 어떻게 해야 할까요? 예를 들어
 
echo dir /b >> list.txt >> test.txt
 
위 구문을 실행하면 test.txt에 dir /b 부분만 들어갑니다. 넣고싶은 문자열은 dir /b >> list.txt 인데 말이죠. 이런 경우 앞서 나온 >> 문자열을 리디렉션이 아니라고 Escape 시킬 필요가 있습니다. 이때는 caret 문자 ^ 를 붙여주면 됩니다. 그러니까 위 예제를 결과값이 의도대로 나오게 고치려면
 
echo dir /b ^>^> list.txt >> test.txt
 

 

PUSHD %~DP0
 
이것 역시 제가 배치파일 초반에 항상 적어주는데요, 그 이유는 윈도우 7 때문입니다. 윈도우 7에선 특이하게도 UAC가 켜져있는 환경에서 배치파일을 관리자 권한으로 실행하는 경우 명령 프롬프트 위치가 C:\Windows\System32 기준으로 실행됩니다. 이게 왜 문제가 되냐하면 보통은 배치파일과 함께 같은 위치에 첨부 파일을 두고 다른 곳으로 복사해주는 명령어를 쓰거나 아니면 그 첨부파일을 실행하는 경우가 많은데, 이렇게 명령 프롬프트 위치가 변경되어 버리면 복사할 파일이나 실행할 파일의 절대경로를 적어야 합니다. 그런데 배치파일은 어느 위치에서 실행될지 아무도 모르죠. 따라서 복사할 파일의 절대경로도 그때그때 달라지게 됩니다. 물론 각 파일 경로 앞에 %~DP0를 일일이 붙여주면 되지만 그건 너무 귀찮은 일입니다. 따라서 이렇게 명령 프롬프트 위치를 배치파일이 있는 디렉터리로 되돌려주는게 훨씬 편합니다.
 
그런데 %~DP0의 의미가 궁금하실 것 같습니다. 이게 바로 FOR 구문의 대체 변수 참조 확장입니다. 자세한 내용은 FOR /? 입력해서 확인해보시구요, 저는 간단히 예제를 통해 설명드리겠습니다.
 
배치파일에서 %0는 그 배치파일의 전체 경로를 지칭합니다. %0 사이에 들어있는 ~dp는 %변수를 드라이브 문자와 경로로만 확장해줍니다. 예를 들어 제 컴퓨터 바탕화면에 예제.cmd 파일이 있는 경우
 

 


%0
 

“C:\Users\snoopy\Desktop\예제.cmd”
 

 

%~0
 

C:\Users\snoopy\Desktop\예제.cmd
 

 

%~d0
 

C:
 

 

%~p0
 

\Users\snoopy\Desktop\
 

 

%~n0
 

예제
 

 

%~x0
 

.cmd
 

 

%~dp0
 

C:\Users\snoopy\Desktop\
 

따라서 pushd %~dp0 라고 적으면 명령 프롬프트가 배치파일이 존재하는 위치로 돌아오게 됩니다. 이제 응용력이 뛰어나신 분들은 이런 생각을 하실 것 같습니다. "그렇다면 %~dpnx0 와 %~0 는 같은 값을 나타내겠군!" 네 그렇습니다. %~ 확장은 이처럼 한꺼번에 섞어서 사용해도 됩니다.
 
※ 참고로 PUSHD %~DP0 대신에 CD /D %~DP0 해도 상관은 없습니다.
 

 

TITLE
 
이건 별로 중요하지 않은데, 배치파일을 실행했을 때 콘솔창에 표시되는 창 제목을 지정합니다. 원래 아무것도 지정하지 않으면 제목이 C:\Windows\System32\cmd.exe 인데, 이 부분을 변경하는 것입니다.
 
예제)
 title 아이폰 4 AVI, MKV 동영상 자동 변환기
 

 

 


MODE
 
이것도 별로 중요하지는 않은데, 배치파일에선 콘솔창 크기를 지정하는 용도로 사용할 수 있습니다.
 
예제)
 mode con cols=40 lines=11
 

 

 

 

COLOR
 
콘솔창의 화면 색을 지정할 수 있습니다. 저는 까만 바탕에 흰 글씨가 마음에 들지만 예를 들어 파란 바탕에 흰 글씨로 지정할 수도 있겠지요.
 
   0 = 검정색       8 = 회색
    1 = 파랑색       9 = 연한 파랑색
    2 = 초록색       A = 연한 초록색
    3 = 옥색         B = 연한 옥색
    4 = 빨강색       C = 연한 빨강색
    5 = 자주색       D = 연한 자주색
    6 = 노랑색       E = 연한 노랑색
    7 = 흰색         F = 밝은 흰색
 
첫째 자리는 배경색이고 둘째 자리는 문자색입니다.
 
예제)
 color 1F
 

 

 

 

CLS
 
화면을 깨끗하게 비웁니다. Clear Screen의 약자인데 보통 새로 메뉴를 출력해주는 경우 기존에 보이던 결과물 때문에 지저분하니까 CLS를 적어줍니다.
 

 

PAUSE
 
이것도 주로 안내문을 보여준 다음 적어줍니다. 일시정지 시켜둬야 사람들이 안내문을 읽어볼 수 있으니까요. 아무 키나 누르면 다음 명령어로 넘어갑니다. 저는 보통 배치파일을 작성하면서 중간중간에 PAUSE를 걸어넣고 파일을 실행해봅니다. 여기까지 오류없이 잘 작성되었는지 테스트 해보기 위함이죠.
 

 

IF, IF NOT, IF EXIST, IF ERRORLEVEL, ELSE
 
지금부터가 진짜 배치파일입니다. 위에서 다뤘던 내용들은 그냥 준비운동 정도였고 배치파일에서 가장 많이 사용되는 (저만 가장 많이 사용하는지도 모르지만 ;;;) 구문이 바로 IF, FOR, SET 입니다. 이 3가지 구문이 배치파일의 꽃이라고 저는 생각합니다. 특히 저는 FOR 반복문을 매우 자주 사용하는 편인데, FOR 구문을 잘 활용하시면 "감히 배치파일로 이게 가능한가?" 생각했던 기능들도 훌륭히 만들어낼 수 있습니다.
 
IF는 말 그대로 "~인지 아닌지" 를 판단합니다. 만약 조건이 참이면 그 뒤에 나오는 명령어를 수행하고 참이 아니면 다음 줄로 넘어갑니다.

IF 문자열1==문자열2 명령어
 
예제)
 set A=snoopy
 if %A%==snoopy echo %A%는 snoopy와 같습니다.
 set B=snoopybox
 if %B%==snoopy echo %B%는 snoopy와 같습니다.
 
위 예제에서 첫번째 IF 구문은 조건이 참이기 때문에 "snoopy는 snoopy와 같습니다." 문구를 출력해줍니다. 하지만 두번째 IF 구문은 조건이 거짓이기 때문에 그 뒤에 나오는 echo 명령어는 무시됩니다.
 
IF 뒤에 /i 를 붙이시면 대소문자를 구분하지 않습니다. 이게 윈도우에선 IF 도움말에 잘못 표기되어 있네요. /i를 붙이면 대소문자 구분이 없고, 안 붙이면 대소문자를 구분합니다. 도움말에는 반대로 나와 있습니다.
 

숫자 비교에는 아래 비교연산자들이 사용됩니다.
 
    EQU - 같음
     NEQ - 같지 않음
     LSS - 보다 작은
     LEQ - 작거나 같음
     GTR - 보다 큰
     GEQ - 크거나 같음
 
예제)
 if 5 equ 5 echo 5는 5와 같습니다.
 if 5 neq 5 echo 5는 5와 같지 않습니다.
 if 5 lss 5 echo 5는 5보다 작습니다.
 if 5 leq 5 echo 5는 5보다 작거나 같습니다.
 if 5 gtr 5 echo 5는 5보다 큽니다.
 if 5 geq 5 echo 5는 5보다 크거나 같습니다.
 
위 예제에서는 1, 4, 6번째 줄만 참이기 때문에 뒤에 있는 echo가 출력되겠지요? 대충 저렇게 쓴다는 것만 알고 다음으로 넘어갑니다.
 

IF NOT은 IF와 반대로 생각하면 됩니다. 뒤에 나온 조건이 거짓인 경우에 IF NOT은 참이 되기 때문에 명령을 실행하게 됩니다.
 
예제)
 if not snoopy==snoopy echo 과연 이 메시지가 출력될까?
 
위 예제를 실행하면 echo 다음에 나오는 메시지가 출력되지 않습니다. IF NOT이니까요. 하지만 만약에 if not snoopy==snoopybox 했다면 뒤에 나오는 명령어는 출력이 되었겠지요?
 

IF EXIST는 지정한 파일, 폴더가 존재하면 조건을 참으로 받아줍니다. 대략 아래와 같은 예를 만들어 보겠습니다.
 
예제)
 if exist %windir%\syswow64 echo 이 윈도우는 64비트입니다.
 if not exist %windir%\syswow64 echo 이 윈도우는 64비트가 아닙니다.
 
위 예제를 실행하면 64비트 윈도우인 경우 첫번째 echo 구문만 출력될 것이고, 32비트 윈도우인 경우 두번째 echo 구문만 출력될 것입니다. 마찬가지로 IF EXIST 구문도 IF NOT EXIST로 활용할 수 있습니다.
 

IF ERRORLEVEL 역시 제가 자주 사용하는 구문인데 마지막으로 실행된 프로그램의 종료코드가 무엇인지를 가지고 조건을 판단합니다. 일반적으로 아무런 오류가 없이 잘 실행된 경우에는 종료코드가 0입니다. 오류가 발생하면 종료코드는 1 이상입니다. IF ERRORLEVEL 1  하시면 종료코드가 1보다 크거나 같은 경우 참으로 인식합니다.
 
예제)
 ren C:\Windows WindowsXP
 if errorlevel 1 echo 윈도우 폴더는 이름을 변경할 수 없어요.
 
위 예제에서 첫번째 줄에 Windows 폴더 이름을 WindowsXP로 변경하라고 합니다. 말이 안 되죠? 당연히 오류가 발생할 수 밖에 없습니다. 따라서 두번째 줄에 있는 IF ERRORLEVEL 1 구문은 바로 위에서 오류가 발생했기 때문에 값이 참으로 지정되어 echo 뒤에 나오는 문구를 출력해줍니다.
 

ELSE는 IF랑 묶어서 사용하는데 여기서부터는 괄호를 사용하겠습니다. 이 괄호를 보기좋게 잘 써야 프로그램을 체계적으로 짤 수 있고, 나중에 자기가 봐도 흐름이 한 눈에 보입니다. 위에서 예를 들었던 윈도우 64비트 판별을 ELSE로 표현해보자면
 
예제)
 if exist %windir%\syswow64 (
           echo 이 윈도우는 64비트입니다.
 ) else (
           echo 이 윈도우는 64비트가 아닙니다.
 )
 
그러니까 ELSE는 IF 조건이 거짓인 경우 실행됩니다. IF가 옳으면 IF 구문 뒤에 있는 명령어가 실행되고, 그게 아니면 ELSE 뒤에 있는 명령어가 실행됩니다. 둘중에 하나만 무조건 실행되게 만드는 양자택일 구문이라 보시면 됩니다.
 

여기까지 대충 IF 구문에 대해 알아봤는데요 실전 예제 몇가지를 소개해봅니다. 아래는 제가 아이폰 4 AVI, MKV 동영상을 MP4로 한방에 변환하기 글에서 사용한 SRT 자막 통합 스크립트입니다.
 

예제)
 set list=자막 통합에 실패한 파일 목록.txt
 if exist *.srt (
      if not exist temp md temp
      for %%a in (*.srt) do (
           if exist "%%~na.mp4" (
                Tools\mediainfo "%%~na.mp4" > temp\temp1.txt
                findstr /c:"Codec ID                         : tx3g" temp\temp1.txt > nul
                if errorlevel 1 (
                     Tools\mp4box -add "%%a":lang=ko:hdlr=sbtl "%%~na.mp4"
                     if errorlevel 1 echo %%~na.mp4 >> "%list%"
                ) else (
                    Tools\mp4box -add "%%~na.mp4"#video -add "%%~na.mp4"#audio -add "%%a":lang=ko:hdlr=sbtl "%%~na-new.mp4"
                    if errorlevel 1 echo %%~na.mp4 >> "%list%"
               )
          )
     )
 )
 

list 라는 변수에 "자막 통합에 실패한 파일 목록.txt" 문자열을 할당하라
 현 위치에 확장자 SRT 파일이 존재하면 (
      TEMP 폴더가 없다면 TEMP 폴더를 만들어라
      모든 SRT 파일에 대하여 다음 반복문을 실행하라 (
           만약 SRT 파일과 동일한 이름의 MP4 파일이 존재한다면 (
                미디어인포 프로그램으로 MP4 파일의 정보를 TEMP 폴더의 TEMP1.TXT 파일로 저장하라
                TEMP 폴더의 TEMP1.TXT 파일에서 Codec ID : tx3g 문구가 있는지 찾아봐라
                만약 이 문구가 없다면 (
                     기존에 있던 MP4 파일에 자막만 통합하라
                     만약 자막 통합시 오류가 발생했다면 MP4 파일 이름을 LIST 파일에 저장하라
                ) 만약 이 문구가 있다면 (
                     기존 MP4 파일에서 영상과 음성을 추출하고 자막을 통합하여 새로운 MP4 파일을 만들라
                     만약 자막 통합시 오류가 발생했다면 MP4 파일 이름을 LIST 파일에 저장하라
                )
           )
      )
 )
 

말로 설명하려니 좀 지저분한데 아무튼 위 예제에는 IF, IF NOT, IF EXIST, IF ERRORLEVEL, ELSE 모두 다 적절히 잘 활용되어 있습니다.
 
한가지 예를 더 들어보겠습니다. 한글, 영어, 통합 자막 이렇게 3가지 자막을 통합하려 한다면 경우의 수는 8가지가 나오겠지요. 그런데 한글 자막은 무조건 존재하고, 통합한다고 가정하면 4가지 경우가 발생합니다.
 

 


한글
 

영어
 

통합
 

 

O
 

O
 

O
 

 

O
 

O
 

X
 

 

O
 

X
 

O
 

 

O
 

X
 

X
 


if exist 한글 (
           if exist 영어 (
                     if exist 통합 (
                               한글, 영어, 통합 모두 있는 경우 명령어
                     ) else (
                               한글, 영어만 있는 경우 명령어
                     )
           ) else (
                    if exist 통합 (
                               한글, 통합만 있는 경우 명령어
                    ) else (
                               한글만 있는 경우 명령어
                    )
           )
 )
 

이정도면 IF 구문에 대해서는 충분히 설명을 했다고 생각되는데 어떠실지 모르겠네요. 프로그램을 작성하는 데 있어서 가장 중요한 것은 역시 논리적 사고라 생각합니다. 일단 논리적으로 설계도만 잘 짜면 코딩은 껍데기에 불과하다고 봅니다. 위 예는 아주 간단한 배치파일에 불과하지만 엄청 큰 규모의 프로그램을 작성하려면 설계도부터 체계적으로 잘 짜야겠지요.
 

 

FOR
 
FOR 구문은 여기서 따로 다루지 않겠습니다. 지난번에 작성했던 글을 참조하세요.
 2010/08/28 - [윈도우 일반] - FOR 구문 기초 사용법
 
Perl 스크립트에는 FOR, FOREACH, WHILE 반복문이 있던데, 배치파일에는 FOR 반복문밖에 없고 사용법도 조금 제한적이라 아쉽기는 합니다. 하지만 그래도 저는 FOR 구문이 배치파일의 꽃중의 꽃이라 생각합니다. 꼭 잘 익혀두셔서 능숙하게 다루실 수 있기를 빌겠습니다.
 

 

SET
 
SET에 대해서는 사실 프로그래밍 언어를 좀 알아야 개념을 이해하는데 도움이 되는데, 뭐 저도 프로그래밍 언어는 모르니까 딱 제가 이해하는 수준 정도로만 설명을 드리겠습니다.
 
SET 변수=문자열
 
일단 이게 기본입니다. 왼쪽에는 변수 이름을 적어주고 오른쪽에는 변수의 값을 적어줍니다. 그리고 배치파일에서 변수를 호출할 때는 양쪽에 %를 붙여주시면 됩니다.
 
예제)
 set A=snoopy
 echo %A%
 
위 예제를 실행하면 화면에 snoopy를 출력해줍니다. A 라는 변수에 snoopy라는 문자열이 값으로 지정되었기 때문입니다. 이때 변수는 대문자와 소문자를 구분합니다. 즉 A와 a는 다른 변수입니다.
 
SET /A 변수=수식
 
변수에 숫자를 할당할 때는 그냥 할당하면 되지만, 수식의 계산 결과를 할당하려면 /A 옵션을 붙여야 합니다.
 
예제)
 set B=5
 set /a B=B+3
 echo %B%
 
위 예제의 결과값은 8이 나오겠지요? 참고로 연산식은 아래와 같이 좀 더 간단히 표현할 수 있는데
 
    = *= /= %= += -=    - 할당
 
예를 들어 위에 있는 set /a B=B+3 대신에 set /a B+=3 이렇게도 쓸 수 있습니다.
 좀 더 예를 들어 설명드리는게 이해가 쉽겠네요.
 
B는 5라고 가정하고 아래 예제는 각각
 
set /a B+=3          =>   B에 3을 더해서 새로운 B 값을 할당          => 8
 set /a B-=3          =>   B에 3을 빼서 새로운 B 값을 할당          => 2
 set /a B*=3          =>   B에 3을 곱해서 새로운 B 값을 할당          => 15
 set /a B/=3          =>   B를 3으로 나눈 몫을 새로운 B 값에 할당          => 1
 set /a B%=3         =>   B를 3으로 나눈 나머지를 새로운 B 값에 할당          => 2
 

아래 예제의 결과물을 예측해보세요.
 
예제)
 set i=0
 for /l %%a in (1,1,100) do (
      set /a i += %%a
 )
 echo %i%
 pause
 exit
 
정답은

더보기

 

 
다음은 메뉴 고르기에 많이 사용되는 SET /P 구문입니다. /p를 붙이면 프롬프트 상에서 사용자에게 입력값을 받는데요, C 언어의 scanf 함수와 비슷하다 볼 수 있습니다. 다음 예제를 배치파일로 실행해보면 이해가 바로 될 겁니다.
 
예제)
 @echo off
 set /p age=당신의 나이를 입력해주세요 :
echo 당신의 나이는 %age% 입니다.
 pause
 exit
 

변수 확장에 관한 이야기도 있는데 이건 제가 별로 사용하지 않아서... 대략 예를 하나만 들어보겠습니다.
 
예제)
 @echo off
 set snoopy=스누피는 컴퓨터를 좋아합니다.
 set snoopy=%snoopy:~-10%
 echo %snoopy%
 
위 예제를 실행하면 "퓨터를 좋아합니다." 문자만 출력됩니다. ~-10 이게 "뒤에서 10개의 문자만" 추출하는건데 아무튼 이 확장에 대해서는 그냥 각자 도움말을 참조하여 공부하세요.
 

 

SETLOCAL
 
이놈은 위 SET 명령어와 같이 활용해야 하는데 저는 잘 쓰지 않습니다. 그런데 이게 필요한 경우가 있습니다. 그것은 바로
 
SETLOCAL ENABLEDELAYEDEXPANSION
 
이녀석은 제가 가끔 FOR 구문에서 사용하는데 사실 저도 100% 완벽히 이해한 것은 아닙니다. 일단 아래 예를 한번 보세요.
 
예제)
 for %%a in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do (
      set b=%%a
      echo %b%
 )
 
얼핏 생각하기에 위 예제는 작동할 것 같은데요, 사실은 작동하지 않습니다. 첫 명령어에서 b 변수에 C: 문자열이 할당되니까 C: 를 출력해주고, 그 다음엔 다시 b에 D: 문자열이 할당되어서 D: 문자열을 출력해주고... 이걸 Z: 출력까지 반복할 것 같지만 이상하게도 위 구문은 실행되지 않습니다.
 
위 예제가 의도대로 구동되도록 하려면 아래와 같이 바꿔야 합니다.
 
SETLOCAL ENABLEDELAYEDEXPANSION
 for %%a in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do (
      set b=%%a
      echo !b!
 )
 
그러니까 SETLOCAL ENABLEDELAYEDEXPANSION을 설정한 다음 %b% 대신 !b!를 사용해야 합니다. 자세한 개념은 저도 설명을 못 하니 그냥 그렇다고만 알아두세요. 제가 대충 이해하기로는 이렇습니다. 저렇게 FOR 이나 IF에서 괄호를 사용해 아래쪽에 명령줄을 여러개 써넣어도 사실은 이게 한줄짜리 명령어인데, 명령어를 읽어들이는 과정과 명령어를 실행하는 과정 사이에 발생하는 시차 때문에 이런 문제가 생깁니다. b라는 변수에는 아무런 값도 할당되지 않은 상태인데 그상태로 명령어가 입력되기 때문에, 저 반복문에서는 "echo 설정되어있지 않은 변수" 이걸 반복하게 되는거죠. set으로 %%a 값을 b에 넣어주는건 시간적으로 그 다음에 일어나는 일이구요. 그래서 SETLOCAL ENABLEDELAYEDEXPANSION 옵션이 존재합니다. 아무튼 % 대신 ! 쓴다는거 알아두세요.
 

 

GOTO
 
이것도 많이 쓰이는데 사용법이 어렵지 않아서 간단히 다룹니다. GOTO 뒤에는 레이블을 적어주시면 그리로 이동하는데 레이블은 콜론으로 시작합니다.
 
예제)
 :menu
 cls
 echo.
 echo 1. 저는 남자입니다.
 echo 2. 저는 여자입니다.
 echo.
 set /p menu= 번호를 선택해주세요 :
if "%menu%"=="1" goto male
 if "%menu%"=="2" goto female
 goto menu
 
:male
 cls
 echo.
 echo 당신은 남자입니다.
 echo.
 pause
 exit
 
:female
 cls
 echo.
 echo 당신은 여자입니다.
 echo.
 pause
 exit
 
위 예에서 set /p menu 값에 1을 입력하면 male 부분으로 이동하고 2를 입력하면 female 부분으로 이동합니다. 1,2가 아닌 엉뚱한 값을 입력하면 menu 부분으로 다시 이동합니다. GOTO는 어렵지 않죠?
 
그리고 제가 exit를 썼는데 :EOF를 쓰기도 합니다. GOTO :EOF라고 적어주면 exit와 같은 효과를 얻을 수 있습니다. 따로 :EOF 레이블을 만들어줄 필요는 없습니다.
 

 

실전 예제 고스트 자동 복구 DVD
 
지금까지 지루한 내용을 꾹 참고 다 읽어오신 분이라면 (FOR 구문까지) 이제 웬만한 배치파일은 작성하실 수 있을 것 같은데, 그래도 이게 눈으로 보는 것과 직접 실습하는 것은 많이 다릅니다. 컴퓨터 뿐 아니라 공부나 다른 일도 마찬가지인데, 직접 몸으로 느껴봐야 진짜 나만의 지식이 될 수 있습니다.
 
일단 이 글을 작성한 이유가 고스트 자동 복구 DVD 만들기 글에서 배치파일 소스를 알려달라는 분들이 많았기 때문인데요, 저 글에 나온 배치파일은 이 글에서 설명한 어려운 구문들이 거의 들어가지 않습니다. 정말 쉽고 간단한 구문으로만 이루어져 있습니다. 그런데 당시 작성했던 스크립트를 다 쓰려면 좀 길어지기 때문에 메뉴를 단순화 해서 4가지만 적어보겠습니다.
 

@echo off
 for %%a in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do (
           if exist %%a\sources\backup.gho set DVD=%%a
 )
 
:_main
 cls
 echo.
 echo.
 echo.
 echo          1. 고스트 수동으로 작업하기
 echo.
 echo          2. 첫번째 하드의 첫번째 파티션에 복원하기
 echo.
 echo          3. 명령 프롬프트 띄우기
 echo.
 echo          4. 파티션 위저드 실행하기
 echo.
 echo.
 echo.
 set /p menu=번호를 입력해주세요 :
if "%menu%"=="1" goto _ghost
 if "%menu%"=="2" goto _restore
 if "%menu%"=="3" goto _cmd
 if "%menu%"=="4" goto _pwhe
 goto _main
 
:_ghost
 X:\ghost32
 goto _main
 
:_restore
 X:\ghost32 -clone,mode=pload,src=%DVD%\sources\backup.gho:1,dst=1:1 -auto -sure -rb -noide -fnf
 exit
 
:_cmd
 start cmd
 goto _main
 
:_pwhe
 X:\pwhe
 goto _main
 

 

어떤가요? 이 글에서 설명한 복잡한 내용은 하나도 없고 완전 단순하죠? 위 예제를 응용해서 나만의 고스트 자동 복구 DVD를 만드시면 되겠습니다.
 

혹시 잘못된 내용 있으면 고수님들 지적 부탁드립니다. ^^

 

 

Tag : Bat, cmd, dos, FOR, If, set, 배치파일

Trackback 4 , Comment 94

 

 

 

이전 댓글 더보기


꿈의 별
2010/09/29 21:53

수정/삭제답글

제가 가장 애용하는 DOS군요~!! ^^
 
열심히 DOS 명령어 공부 하고있습니다.


 snpbox
2010/09/30 08:33
수정 및 삭제
DOS보단 명령어가 좀 더 많아졌지요. ^^

 


한운
2010/09/29 23:21

수정/삭제답글

고맙습니다^^*
 그리고 트위터에 올려주신 크롬플러스 새버전 설치해봅니다~


 snpbox
2010/09/30 08:34
수정 및 삭제
무설치 버전이라 바로 사용 가능합니다. ^^

 


 Wingz
2010/09/29 23:31

수정/삭제답글

도스 시절엔 640kb 메모리 꽉꽉 채워 게임한다고 autoexec.bat, config.sys 진짜 많이 만지작 거렸는데..;;
 
멀티부팅 메뉴 만들었을 때, 아 이게 되는구나 하고 신났었는데..;;;
 
마우스랑 cdrom 띄우는데..1kb 만 먹는 파일 구한다고 좀 힘들었음..하도 오래되서 어떻게 만들었는지
 
기억도 안나네요..ㅎㅎ 글 잘 보고 갑니다!!


 snpbox
2010/09/30 08:36
수정 및 삭제
저도 한 96년 정도까진 DOS를 많이 애용했던 것 같습니다. 윈 95를 써도 일부러 DOS 6.2랑 멀티부팅 했었죠. 그시절이 참 좋았던 것 같네요.

 


 Shine O
2010/09/30 01:11

수정/삭제답글

저 요즘에 C언어하는데 도움많이 되겟네요 ^^ 감사요^^


 snpbox
2010/09/30 08:39
수정 및 삭제
C랑 많이 다른데 도움이 될까요 ㅎ

 

 Shine O
2010/09/30 16:12
수정 및 삭제
저는 system()함수로 간단히 구현하는 프로그램 주로 짜기때문에(자동종료프로그램같이) 배치파일 문법 도움이 많이 됬습니다 ^^

 

 스폰지s
2010/10/05 17:45
수정 및 삭제
저도 요즘 C언어 공부하는데(입문이지만 ㅎㅎ)
 이거 읽고 C로 system() 함수 쓰는데 도움 될 것 같네요
 (아직은 어렵지만;;)
 잘 읽고갑니다~

 


 RiosMV
2010/09/30 12:19

수정/삭제답글

멋지네요.. 이렇게 까지 설명 해놓으시다니.. ㅎㅎ
 
근데 호스팅 주소 바꿔 놓으시니깐 중국에서 접속이 안돼네요.. ㅡ,.ㅡ
 티스토리가 원래 예전에 중국에서 접속이 안됐었는데 최근에 접속이 돼거든요.
 
쓰시는 호스팅 쪽이 중국 아이피 차단 돼어 있나봐요.. ㅡ.ㅡ
어짜피 VPN 쓰기 땜에 상관은 없지만요 ^^


 snpbox
2010/09/30 15:40
수정 및 삭제
음... 지금도 티스토리인데 왜 접속이 안되실까요... 도메인은 호스팅 KR에서 등록했는데 그거랑은 상관이 없지 않나요? 암튼 hosts 파일 수정법 한번 써보세요. ^^;;

 

대륙의신과장
2010/09/30 19:55
수정 및 삭제
RiosMV님
 혹시 VPN 뭐 쓰시나요??
 추천 좀 해주세요..
 (저도 대륙에 살고 있어요..)
 
스눞님
 역시 인터넷에서 댓글 다는 분들 보면 일부 몰지각한 분들 간혹 보이는데 넘 마음상해 하지 마세요.
 이래서 인터넷도 기본 소양이 되는 사람만 쓰게 해야 되는데..ㅎ
 항상 좋은 글 감사히 잘 읽고 있습니다.

 


 박문식
2010/09/30 22:21

수정/삭제답글

근데 대단하시다 아주 자연스럽게 그리고 차단해드릴게요. ^^..... 나라면 욕을 써댓을텐데...


 snpbox
2010/09/30 22:31
수정 및 삭제
타블로 사건 이후로 오랜만에 이상한 사람이 굴러들어와서 제가 흥분을 좀 했습니다. 끝까지 자기가 잘못 알았다고는 인정을 안 하더군요. 보니까 네이버 카페에서도 이상한 짓을 많이 해서 추방당한 것 같던데 애초에 처음 댓글 달렸을 때 상대해줬던 제 잘못입니다. ㅠㅠ

 

 2모꼬모지
2011/05/04 03:16
수정 및 삭제
난 박문식 같은놈 세상에 있는지도 몰랐어..

 


 PiPS
2010/09/30 22:33

수정/삭제답글

좋은 글 잘보고갑니다^^
 
SysWOW64 폴더로 x86과 x64를 구분하는 방법이 있군요..ㄷㄷ;;
 역시 어렵게 생각하면 안되나봅니다.(아니면 제가 모른건가요 ㅎ)


 snpbox
2010/09/30 22:51
수정 및 삭제
이렇게도 할 수 있습니다. (윈 7)
 
WMIC OS GET OSArchitecture

 


 파츠
2010/10/01 06:45

수정/삭제답글

역시 컴퓨터 기초는 게임이군요.. 정말 도움 많이 되는 포스팅입니다.. 감사합니다.

 


2010/10/01 08:30

수정/삭제답글

비밀댓글입니다


 snpbox
2010/09/30 15:41
수정 및 삭제
2주전에 초대장 보냈는데 아직도 블로그 개설을 안 하신 분이 계셔서 초대장 회수하고 후야님께 보내드렸습니다.

 


 AkGwi
2010/10/01 13:48

수정/삭제답글

음.. 모꼬모지님 블로그도 자주는 아니라도 가끔은 방문한 블로그인데 댓글을..
 상대방을 무시하듯이 남기시내요..약간 실망했습니다..
 틀린게 있거나 조언을 해주시고 싶으시면 상대방을 존중할줄을 배우셔야 겠네요.
 열심히 글쓰신분은 뭐가되나요;;


 2모꼬모지
2011/05/04 03:06
수정 및 삭제
ㅇㅇ) 님 같은분 저의 블로그에 안오셔두 되고욤..
 어차피 실망? 어차피 저한테 실망해봐야 제가
 아쉬울게 없죠? 왜? 제가 님 블로그 찾아갈일이 없잖아... 글쓴사람 뭐가 되나구요?
 뭐요? 소스 잘못 짠것 구박했다구? ㅋㅋㅋ
 - _-)a 그럼 처음 부터 창의적으로 짜지..
 어디서 배껴와서 짜서 .. 가르칠러고 드니..
 잘 모르자넝.. 본인도 잘 이해 못한걸..

 

 2모꼬모지
2011/05/04 03:14
수정 및 삭제
스누피에서 해결 못하면 분명 내블로그 처와서 볼껀데?
 물론 내가 글을 다 쓰진 않았지만..
 배치 하는 놈치고 배치 중하수 정도에 배울러고 하면
 내블로그 안 거칠것 같아?
 자주는 아니어도 가끔도 오지 말아..
 틀린게 있거나 조언 해주고 싶지도 않고.. 그냥
 이렇게 살다 디질란다..
 존중? - _-)a 그럼 댁은 나 존중하는 글로 쓰는 덧글인가? ㅋㅋㅋ
 열심히 글쓴놈 다시 써야지..
왜? 쓰잘떼기 없는 소스 코드 붙여 놓고..
 뭐 소스 이야기 하자면.. 일단..
알려주기 싫으니깐.. 됐고 더 공부 하세요..~!!
 내 블로그 오지 말구 혼자 알아서 잘..하세요..
 오기 싫으면 말든가.. 너가 오든 가든 너는 흔적이나 남기고 왔다가니? 내 블로그엔 흔적도 안남기는 놈이.. 이런데 와서는 흔적 찌끄러기로 남기고 가고..

 

 

2010/10/01 13:48

수정/삭제답글

비밀댓글입니다

 

Good7
2010/10/01 18:30

수정/삭제답글

예전부터 배치파일 작성을 배우고 싶었는데.
 제가 원하던게 바로 이거였습니다...
 정말 감사합니다... 사랑해요. 스누피님..^^

 


2010/10/01 21:34

수정/삭제답글

비밀댓글입니다


 snpbox
2010/10/02 10:50
수정 및 삭제
네 퍼가시는 건 자유입니다. 출처 남기면 좋은 이유는 가끔 본문을 업데이트하기 때문에 피드백 차원에서 출처는 남기는 편이 좋죠. ^^

 


 Wing4Bee
2010/10/02 09:24

수정/삭제답글

정말 유용한 내용이네요.
 저도 배치파일 종종 이용하긴 합니다만 아주 기초적인 명령어만 사용하는 편이죠.
 이 내용은 나중에 배치파일 만들때 참고해야겠네요.
 아래는 제가 예전에 찾아놓은 배치파일 관련 링크들입니다.
 여러분들께 참고가 되시라고 올려드립니다.
 
TechNet Library MS-DOS
 http://technet.microsoft.com/en-us/library/cc743186.aspx
 
Command-line reference A-Z
 http://technet.microsoft.com/en-us/library/bb491071.aspx
 
Microsoft DOS and command prompt
 http://www.computerhope.com/msdos.htm
 
MS-DOS/MSDOS Batch Files: Batch File Tutorial and Reference
 http://www.allenware.com/icsw/icswidx.htm
 
The Windows Command Line, Batch Files, and Scripting
 http://commandwindows.com/


 snpbox
2010/10/02 11:12
수정 및 삭제
좋은 글이네요. 나중에 막히는 부분 있으면 찾아보겠습니다. ^^

 


 TouchTab
2010/10/02 20:08

수정/삭제답글

아주 좋은글이네요~! 갑자기 떠오르지 않으면 두고두고 봐야겠습니다..
 저는 그냥 하나하나 검색해가면서 직접 명령어 하나씩 테스트해서 깨우쳤습니다 -_-
 나중에는 도움말 보면서 그냥 알아가고... 지금도 안되는게 너무많으니원;
 자동복구 DVD 글보고 제가 수정을 해서 쓰려고했는데 스크립트를 몰라서.. 그냥 제가 직접 만들었는데요
 그때 제가 저한테 감탄했던게 생각나네요 ㅋㅋ;;
 그런데 스크립트 길이 비교해보니.. 차이가;;;

 

simong
2010/10/02 21:48

수정/삭제답글

PC 스위치를 누르면 PC가 켜지고
 배치파일에 의해 프로그램 3개가 순차적으로 실행되고
 스위치를 누르면 윈도우즈XP가 자동종료되도록 하고 있습니다.
 그런데 중간 프로그램이 꼭 확인 박스를 표출하여
 마우스나 키보드 조작이 필요합니다.
 에러레벨 체크하는 것처럼 배치파일에서
확인 박스를 클릭한 효과를 낼 수 있는 방법은 없을까요?

 

재당 정사
2010/10/04 12:57

수정/삭제답글

정말 오랜만에 스누피님 포스팅을 보고 글을 남깁니다.
 
그렇잖아도 저는 스크립트는 생짜라서 무엇을 하려고 하면 명령어가 무엇을 말하는가를 몰라서 못했는데, 이렇게 설명까지 붙여놓으니 딱 제 스타일이네요.^^
 
고맙습니다. 두고, 두고 참고 하며 공부할께요...ㅎㅎ

 

 andu
2010/10/08 13:27

수정/삭제답글

확장 일괄 변수에 대해서는 for /? 보다는 call /? 쪽을 참고하는게 착오를 막을 수 있습니다.
 
SETLOCAL ENABLEDELAYEDEXPANSION은 처음 알았네요.
 지금까지 첫째출에 @if not %date%==!date! cmd /v /c %~f0 넣고 시작했는데 이젠 그렇게 안해도 되겠군요.
 
그리고 지연된 확장 변수와 일반 변수의 차이점은
 set name=sno
 for %%i in (snoopy) do set name=%%i&echo %name%
 일때
 %name% 사용시 명령줄이 cmd에 전달될때 변수(%name%)를 값(sno)으로 변환하기 때문에
 for등의 이중 명령 사용시 do 다음의 명령에 있는 변수까지 값으로 변환하기 때문에
 for문의 do 다음부터 변수를 사용하기 전까지 변수에 대한 변경사항(set name=%%i)이 발생하는 경우
 set name=%%i 뒤에 들어가는 echo %name%은 이미 처음 for문 전체가 cmd로 전달될때 sno로 바뀌었기 때문에
 set name=%%i를 통해 변수의 값이 변경됐어도 sno로 출력되는 것이죠.
 
set의 도움말에서 나오는
set VAR=before
 if "%VAR%" == "before" (
 set VAR=after
 if "%VAR%" == "after" @echo If you see this, it worked
 )
 이것이 그 예시입니다.
 
지연된 변수 확장. 즉 !를 이용하는 경우 echo !name!은 처음 for 명령줄이 cmd로 전달시 값으로 변환되지 않고
 해당 단위 명령을 실행하기 직전에 값으로 변환해서 실제 실행되는 명령이 실시간 변수값을 받게 됩니다.
 
for %%i in (snoopy) do set name=%%i&echo !name!
 따라서 이 경우는 제대로 snoopy로 나오게 됩니다.
 
지연된 변수 확장을 이용하지 않고 실시간 값을 가져오는 방법이 있는데
 for %%i in (snoopy) do set name=%%i&^
 for /f "delims=" %%n in ('echo.%%name%%') do echo %%n
 이렇게 for로 우회해서 가져올 수 있습니다만, 조금 명령이 길어지는 단점이 있죠.
 

지연된 확장 변수를 사용 가능한 경우 아주 편리해지는 점이 동적 변수지정입니다.
 @echo off
 setlocal
 set no=0
 if "%~1none"=="none" (set scdrv=C:) else set "scdrv=%~1"
 echo.File listing from %scdrv%
 for /f "delims=" %%i in ('dir /s /b %scdrv%\') do set /a no+=1&title Counting files...[!no!]&set file!no!=%%i
 title Listed total [%no%] files.
 echo.
 :reset
 set ran=%random%
 if %ran% GTR %no% goto reset
 echo.Random file selected.
 echo.[%ran%] !file%ran%!
 
위의 경우 2가지 방법으로 사용되었는데 보다시피 for문에서 실시간 no값을 가져오는데에,
 그리고 마지막줄 echo문에서 랜덤 변수를 참조하는 변수명의 값을 가져오는데에 사용되었습니다.
 지연된 변수 확장이 없었으면 for을 쓰거나 call문 등으로 우회해야 가능한 사용입니다.
 그리고 여기서 사용된 setlocal은 배치 내부에서 사용된 변수들을 배치 종료시 자동소거시키기 위한 것입니다.
 setlocal은 기본적으로 배치 내부에서 생성 또는 변경되는 변수를 시퀀스 종료 후 돌아올때 배치 실행 전으로 되돌리는데 쓰입니다.
 따라서 다중 배치 혹은 call문 사용등의 구성에서 하위 배치에서 생성/변경되는 변수가
 상위 배치의 변수에 영향을 주지 않게 하기 위해 쓰일 수 있습니다.
 물론 위의 경우는 setlocal 뒤에 enabledelayedexpansion이 들어가거나 cmd /v로 실행되어진 상태이어야 합니다.

 

smh
2010/10/14 16:33

수정/삭제답글

한글입력은 어떻게 햐지요?

 

 근영
2010/10/16 07:31

수정/삭제답글

배치 파일을 사용하는 이유가 무엇이죠?
 
저도 군대에서 배치파일과 exe자동압축풀림으로
Printer Driver를 자동으로 설치하고, 바이러스 검사와 디스크 조각모음을 자동으로 되게 했었는데요.
 
제희 서버 관리자에게 배치파일 요즘 배우고 있다고 재밌다고 했더니.
 배치파일은 범용성이 없답니다. 즉, 윈도우에서만 돌아간다. 리눅스나 유닉스에서는 돌아가지 않는다.
 그걸 배우느니 차라리 언어를 하나 파는게 낫다라고 하더군요.
 
이거에 대해서 어떻게 생각하시는지 알고 싶습니다.


 andu
2010/10/16 10:30
수정 및 삭제
유닉스 계열에도 배치는 있습니다.
 다만 배치는 해당 운영체제의 명령어와 문법에 종속되므로 범용성이 떨어지는거 맞습니다만,
 그냥 운영체제만 달랑 있어도 프로그램처럼 만들어서 컴파일 없이 바로 쓸 수 있다는 것과
 실용 목적으로 쓰려면 특정 이상의 지식 수준이 요구되는 프로그래밍 언어와 달리
 명령어만 알면 간단히 필요한 작업을 처리해주는 프로세스를 만들어 쓸 수 있다는 것이 장점입니다.
 프로그래밍 언어는 프로그래밍 언어고, 배치는 배치죠. 포지션이 이미 다릅니다.

 

lvapdw
2010/11/08 12:40
수정 및 삭제
배치파일은 유닉스에서 훨 많이 쓴답니다~ 쉘스크립트라고 해서 왠만한 건 프로그래밍하지 않아도 스크립트로 해결이 될 만큼...오죽하면 스크립트언어라고 부르겠습니까? 유닉스 배치는 매우 광범위합니다.

 

손님1
2013/09/08 16:41
수정 및 삭제
http://kldp.org/node/58297
 
모 딱히 이 페이지를 보시고 가볍게 생각하면서 즐프하는게 어떤가요.
 
처음에 플그램을 만드는 Hello 결과물의 희노애락을 생각하면 답이 나오지 않나 생각이 드네요 ^^
 
생활고에 찌들리지 않고 살면 좋겠다는..

 


남지훈
2010/10/18 19:19

수정/삭제답글

와~ 깔끔하고 알기쉽게 정리 잘해두셨네요~ 저도 간단간단하게밖에 쓸 줄 모르지만 배치파일 만들 때 도움이 많이 되겠어요~ 항상 좋은글 감사합니다

 

MarioTozzi
2010/11/02 09:10

수정/삭제답글

좋은 글 잘 읽었습니다..

 

 hongyang
2010/11/14 18:44

수정/삭제답글

copy와 xcopy와 robocopy 사용법도 써줬으면..

 

 weistern
2010/12/06 01:42

수정/삭제답글

글 내용중에, if 문의 /i 스위치에 대한 도움말이 틀렸다고 나오는데요. 제같은 경우는 if/? 해보니까 맞게 나오네요.
 
the /I switch, if specified, says to do case insensitive string compares.
 
글쓸 당시에는 잘못나와있다가, 이제 수정되었나보군요. ^^;
 확인 부탁드립니다.


 snpbox
2010/12/06 08:13
수정 및 삭제
한글판에서 말씀드린거구요, 영문판은 잘 모르겠네요. 그렇다면 한글화 과정에서 MS가 실수한 것으로 추정됩니다.

 


낮잠
2011/01/12 23:11

수정/삭제답글

netstat -ano 명령의 결과를 변수나 텍스트 파일에 담고싶은데 방법을 아시나요?
 echo netstat -ano >> c:\test.txt 하면 'netstat -ano'명령어가 그대로 담기고
 또, set pid=netstat -ano 라고 하면 pid에 위에처럼 'netstat -ano'명령어가 그대로 담깁니다.


 hongyang
2011/01/13 12:55
수정 및 삭제
netstat -ano > c:\test.txt 이렇게 하면 됩니다.

 


정석
2011/02/04 15:30

수정/삭제답글

snpbox님이 올려주신 자동복구 DVD에 setup파일을 만들어볼까하구, (16GB USB에 윈7과 XP의 만능복구 메뉴를 만들요량으로)일단 위글의 마지막에 올려주신 스크립트로 bat파일 만들고 exe로 바꾸었는데요, 이상하게 2번 메뉴만 먹통이네요.. 2번을 누르면 그냥 고스트가 실행되기만 합니다.(파란 바탕의 고스트 화면)
고스트 파일만 제 임의의 파일이고(물론 backup.gho로 바꾸었습니다.), setup 파일은 제가 위의 스크립트 그대로 사용했거든요, 성공하면 다른 메뉴를 만들기 위해...
 참, 저는 iso를 cd에 굽지 않고 cd영역을 만들어서 사용했습니다만....
 드라이브 검색을 위의 출력구문을 통해 알아보니 드라이브는 맞게 잡는거 같은데,
 어디에서 잘못되었는지 모르겠네요 ~_~
 
혹시 제가 놓친부분이 없나 이렇게 여쭤봅니다.
 아, 그리고 꼭 .gho파일을 소스폴더 안에 넣어야 하는건가요??
 
그럼 설 명절 잘 보내시구요~ 답변기다릴게용 ㅠㅠ


 hongyang
2011/02/05 00:25
수정 및 삭제
gho파일은 아무데나 놓고 이름을 바꾸려면 for구문만 바꿔주면 되는데 이상하네요. ghost파일을 의심해야 하나요? '고스트 자동 복구 DVD 만들기'원본의 setup.exe파일을 이용해보세요. 그래도 안된다면 ghost32.exe가 먹통일 수도 있습니다.

 


정석
2011/02/07 02:41

수정/삭제답글

방금 자동복구 DVD 글에서 받은 setup파일로 시도를 해보았는데요, 그래도 고스트가 실행만되고 작동은 하지 않네요;; 원본이 포함된 드라이브는 제대로 찾는거 같은데, 대체 뭐가 문제일까요 T^T ghost32.exe 가 문제일수도 있나요? 버전은 11.5입니다만.. 떠도는 자료를 받아서;;; 복구하기 메뉴를 누르면 고스트가 실행은 되거든요. 다시한번 부탁드릴게요~_~

 

베루백
2011/02/08 09:43

수정/삭제답글

좋은 글 감사합니다!

 


2011/02/11 23:22

수정/삭제답글

비밀댓글입니다

 

빡식이
2011/02/18 13:54

수정/삭제답글

C언어이든 베이직이던 배치함수이던 알고리즘(설계도)는 똑같습니다. 단지 명령어와 실제 프로그램이 내부적으로 돌아가는 방법이 단순하냐 복잡하냐의 차이입니다.
 3+4=7이라는 덧셈을 할줄안다면 33+44도 할줄알겠죠.
 3333333333+4444444444 이것도 자릿수만 많다뿐이지 3이라는 숫자와 4라는 숫자, 그리고 덧셈의 원리는 똑같은 것이죠. 알고리즘만 이해를 잘하신다면 어떠한 프로그래밍언어도 잘 이해하실겁니다.

 

가가멜
2011/05/12 14:54

수정/삭제답글

알기 숩게 정리가 잘 되었네요 좋은글 감사합니다^^

 

하늘*
2011/05/24 19:34

수정/삭제답글

한가지 여쭤어봅니다
 @echo off
 for %%a in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do (
 if exist %%a\backup.gho set DVD=%%a
 )
 

:_restore
 X:\ghost -clone,mode=pload,src=%DVD%\backup.gho:1,dst=1:1 -auto -sure -rb -noide -fnf
 exit
 
DVD에 ghost파일과backup.gho을루트에넣고 하는데 어떤게 틀린지 가르켜 주세요
 바로 풀리게 할려구 하는데 잘 안되네요
 
향상 행복하세요

 

방가~
2011/06/22 15:16

수정/삭제답글

여기는 새를 잡아주는것보다 새 잡는 법을 가르쳐줘서 머리에 쏙쏙 들어오는것 같아요.
 여타 다른 블로그는 아는 지식을 더 많이 아는것처럼 올리는데 여기는 꼭 필요한것만 찝어서 필요한것만 올려주니 저한테는 케도케도끊이 없는 보물창고 같은...!!! 곳

 

NTOSKRNL
2011/09/09 22:59

수정/삭제답글

퍼가겠습니다.

 


2012/01/02 12:24

수정/삭제답글

비밀댓글입니다

 

몽랑
2012/01/24 11:49

수정/삭제답글

bat파일 조언좀 부탁드려요^^
 프로그램 재실행하게 만들어봤는데요.
 
taskkill /f /im rocketdock.exe
 cd\program files\rocketdock
 rocketdock.exe
 taskkill /f /im cmd.exe
 


rocketdock.exe실행후에 cmd창에 아무글도 안써지네요. 그래서 다음 명령어인 cmd창닫기가 안돼요.
 자동으로 cmd창을 닫으려면 어떻게 해야 할까요?
 


그거야..
2014/03/28 22:30
수정 및 삭제
exit.. 하면 배치창이 종료됩니다..

 


 반찬@
2012/05/23 12:09

수정/삭제답글

좋은 내용 감사합니다. ㅎ

 

 kamjakang
2012/09/02 17:01

수정/삭제답글

너무 오래된 글이라서 질문에 답변이 달릴진 모르겠지만,
 누구라도 아시는 분이 있으시다면
 꼭! 좀 답변 부탁드립니다. ㅠ_ㅠ
 
다름이 아니라
 a.bat 파일을 만들었는데 그 안에는 1.exe 파일을 수행하도록 되어있습니다.
 
문제는 1.exe 가 실행되면 프로그램 자체적으로 숫자 입력값을 받게 되어있는데
 배치파일로는 exe파일이 실행중에 자동으로 입력값을 넣을 수가 없나요!?
 
변수로 미리 입력값을 만들어 놓은뒤.. 그 exe 파일이 실행된 창에 뿌릴수는 없는건지
 궁금합니다.
 
누구라도 아시는분이 계시다면 꼭 좀 도와주세요 ㅠ_ㅠ
 
그럼 즐거운 주말 보내시길~~~
 

 

Batch Nice
2012/10/06 04:52

수정/삭제답글

Errorlevel 1 설명 덕에 많은 도움이 되었습니다. 감사합니다. ^^

 

지나가는 이
2012/11/03 16:25

수정/삭제답글

감사합니다! 덕분에 많은 도움됐습니다.

 

 신명호(정보보안팀)
2012/11/16 09:35

수정/삭제답글

안녕하십니까
 지난번에 교육간 많은 가르침을 주셔서 감사합니다.
안녕하세요
 
서비스 포트를 확인하는 명령어 배치파일을 제작중인데요
 
ms-dos에서 제공하는 portqry툴을 이용하고 있습니다.
 


===================================================================
 
1. @echo off
 
2. @echo %date% %time% MADE_BY Shin Myung Ho Ver 1.1 > %date%_LOG.txt
 
3. portqry -n 10.217.193.83 -o 80,20101,20105
 4. portqry -n 10.217.193.83 -o 80,20101,20105 >> %date%_LOG.txt
 5. @echo.
 
====================================================================
 
결과
 
====================================================================
 
2012-11-16 9:14:29.25 MADE_BY Shin Myung Ho Ver 1.1
 
(portqry 명령어 수행의 결과가 MS_DOS 화면에 출력됨)
 
(portqry 명령어 수행의 결과가 해당폴더에 날짜_LOG.txt 파일로 저장됨)
 
====================================================================
 
이 배치 파일속도를 개선하고 싶습니다
 
이 명령어 상에서 보시는 바와 같이 MS-DOS 창에서
 
portqry 명령어의 결과를 확인하기 위해 MS-DOS창에 먼저 한번이 출력이 되고
 
로그파일을 생성하기 위해 다시한번 Portqry 명령어를 수행하는데요
 
이 것을 한번의 명령어로 처리하기 위해선 어떻게 해야할지 궁금합니다.
 


오래된 글인데다 초짜지만
2013/08/29 11:36
수정 및 삭제
다른 분이 도움이 될까 싶어서...
 
for /f "delims=" %%i in ('명령어') do (
 echo %%i
 echo %%i>로그.txt
 )
 
필요한 경우엔 usebackq 옵션 사용.
 
이러면 작업을 한 번 수행하고 메모리에 저장해서 두 번 출력하는 거니깐 빠르지 않을까요.
 더 간단한 방법이 있으려나...?

 


크롬브라우저사용자
2012/12/27 10:49

수정/삭제답글

구글 크롬 브라우저에서는 이 페이지를 happybug 관련된 악성코드가 있는 페이지라고 하네요.
 운영에 참고 하시기 바랍니다.
 

 

카네기
2013/02/27 12:13

수정/삭제답글

좋은 자료 좀 퍼갈게요^^* 감사드려요~

 

Grant
2013/04/17 16:09

수정/삭제답글

감사합니다~ 배치파일 입문자인데 도움이 많이 되고 있습니다!

 

 광순이
2013/05/15 17:03

수정/삭제답글

이 블로그 정말 대박입니다^^ 많이 배우고 갑니다.

 

잘배워갑니다. ^^
2013/05/18 10:31

수정/삭제답글

한가지 질문이 있는데요. set /p로 입력받은 변수를 문자와 숫자로 나누어 취급하고 싶은데 어떻게하면 좋을까요? 어디 물을데도 없고 해서... 부탁드립니다. ㅠㅠ

 

 브라운9
2013/07/11 17:07

수정/삭제답글

큰 도움이 되었습니다. 고맙습니다.

 

깜장개미
2013/08/07 13:28

수정/삭제답글

정말 많은것을 배워 갑니다.. 염치 불구하고 질문하나만 드릴께요.. 배치 명령을 이용해서 파일 크기를 비교하는 방법이 있을까요?

 

 Dneirf
2013/10/27 23:34

수정/삭제답글

Batch Script를 전혀 몰랐었는데 덕분에 기초를 쉽게 배우고 업무에 활용할 수도 있었습니다. 감사합니다. 계속 참조하고 싶어 퍼가고 싶습니다. 링크만 걸어두겠습니다. 괜찮으시겠지요? ^^

 

kim
2013/11/05 17:49

수정/삭제답글

혹시 글자 크기도 명력어로 조정 할수 있을까요?
 기본 글씨는 너무 작은 것 같아서....ㅋㅋ

 

 

 

 


비밀글

 

 

<< Prev1...319320321322323324325326327...778Next >>

 


블로그 광고문의 :: TNM
 

 

 

 

 

 

 

 

 

snoopybox

by snpbox

컴퓨터, 윈도우, 리눅스, 프로그램, 인터넷, 동영상, 스마트폰

블로그 소개
티스토리 초대장 안내

 

 


 

분류분류

분류 전체보기 (778)윈도우 일반 (63)
XP (35)
VISTA (19)
Windows 7 (218)설치 이야기 (53)
부팅 & PE 이야기 (21)
VHD 이야기 (26)
관리자 이야기 (8)
XP 모드 이야기 (7)
정품 이야기 (12)
기타 윈도우 7 이야기 (91)

Windows 8 (19)
서버 2003 (7)
서버 2008 (28)
서버 2012 (3)
리눅스 (35)
가상화 & 클라우드 (15)
유용한 프로그램 (97)
컴퓨터 관련 팁 (80)
컴퓨터 하드웨어 이야기 (40)
동영상 이야기 (32)
스마트 폰 (27)
SNS (1)
프로그래밍 (6)
ROKMC (1)
잡담 (51)

 

최근에 올라온 글최근에 올라온 글
윈도우 서버 종료시간 비정상적으로 오래.. (17)
리눅스 본딩 구성 (4)
윈도우 서버 2012 .NET Framework 3.5 오.. (4)
윈도우 NTP 동기화 (1)
윈도우 설치된 핫픽스(업데이트) 확인 (3)
윈도우 CMD 프롬프트 hostname 표시 (1)
윈도우 7 설치 - 필요한 CD/DVD 드라이브.. (13)
윈도우 커맨드로 hostname 변경하기 (2)
윈도우 SID 확인 방법 (2)
리눅스 IP를 변수로


최근에 달린 댓글최근에 달린 댓글
COMS 설정까지 했는데도 도무지 안되길래..
13:04이병섭
그냥 램디스크가 최강이죠 리얼 빠름
05:15지나가던 정사람
xP버전쓰다가 윈 7로 가야되는데 똑같이..
01:16수형
아무리해도 안되네요... 제가 기존 xp하..
04/30안되요
이방법으로해서 성공해서 감사합니다!!..
04/30암까이
스눕님 덕에 원하는 정보는 얻어 유용하..
04/30올라
캔츠옹3기가제한의 오버사항은 기본전압..
04/30블링블링
저같은경우는 펑션이 F12여서 그거누르고..
04/30하이도
아... 완전 미칠거 같아요... 스누피님..
04/29테리우스
정품인증은 어떻게 하나요
04/29틴피시


최근에 받은 트랙백최근에 받은 트랙백
Windows7 드라이버 지원하지 않는 장치..
04/28디지털리스트 hisastro
Wallpapers in HD Resolutions
03/19Wallpapers in HD Resolutions
public adjusting Texas
03/10public adjusting Texas
click the following document
03/10click the following document
public adjusting
03/09public adjusting
public adjuster
03/09public adjuster
public adjuster Houston Texas
03/08public adjuster Houston Texas
public adjuster Houston Texas
03/08public adjuster Houston Texas
윈도우 서버에 Hyper-V(하이퍼V) 설치하..
03/07Dsuny
윈도우즈 설치이미지 고스트 만들기
01/05Carpe Diem


링크링크
 Jmnote
 캐플
 꼬알라
 LiveREX
 씨디맨
 Linux Shell Scripting Tutorial
 KLDP
 Super User
 Stack Overflow

 Total 22,230,767 Today 3,257 Yesterday 8,497

 

 

 

 


http://file.tattermedia.com/media/image/plugin/tnm_badge_white.gif

 

 

 

snoopybox is Powered by Tistory. Supported by TNM. Skin by thering.co.kr
 

 

 


강팀장의 e-Biz Story
나노마케팅(Nano marketing)이 무엇입니까??
큐레이션의 또 다른 과제 Media 성장 하라.- 3..
SNS 서비스 기획시 댓글은 어떻게 기획할 것..
단순 일상의 공유? - 가치 생산 공유 VCS(Val..
SNS 같은 소셜웹 기획할때 이것 만큼은 꼭...


오픈컴즈(까칠맨의 버럭질)
'영단기', 대한민국 교육시장을 독식할 수 있을..
혼자 하기 힘든일…여럿이 해도 힘들다.
SF(Science Fiction)와 SF(Social Fiction)_상..
"파는 것이 인간이다"_인간은 누구나 무언가를 ..
정보의 주도권은 이미 소비자에게 넘어갔다.


공상제작소
안드로이드폰, 차세대 경쟁은 해상도로?
윈도우폰 8.1, MS의 변화가 노리는 것은?
제 3기 방통위 출범, 어떤 방향으로 갈까?
모바일 월드 콩그레스 2014, 주목할 기술은?
한국MS가 제시한 미래 교육의 모습은??


Web 2.0과 인터넷지도
우리나라 지오캐시 전체를 GPS에 올리는 방법
가민 오레곤 650 설정 - 지오캐싱용
구글 play 북 - 정말 쓸만한 epub 전자책 리더
식품용 이산화탄소?
맵헤드(Maphead) - 잡학의 대가가 만난 괴짜 ..


Extremely Agile
인간의 판단력은 얼마나 믿을 수 있는가
큰 배에 반드시 갖춰져야 할 구명용품 후보
워드 문서에서 고정폭 서체가 고정폭으로 표시..
Openflow 기반의 오픈소스 SDN 컨트롤러 Op..
오픈소스 프로젝트를 진행할 때 유의할 점


니오의 NWEB
SKT LTE Carrier Aggregation에 대한 오해
KT 경제경영연구소 보고서 모음
MWC 2014의 스마트폰 트렌드
구글은 달에 갈것인가
MWC 2014 참관기 7편 - 바르셀로나
 

'wif LiNoUz > SERVER' 카테고리의 다른 글

성능모니터링  (0) 2014.05.14
배치 예제  (0) 2014.05.01
성능모니터링  (2) 2014.01.13
router add 다중 네트워크  (3) 2013.03.25
공유기 뚫기  (7) 2013.03.22