|
아래와 같이 고쳐야 합니다.
if %errorlevel% == 1 goto one
if %errorlevel% == 2 goto two
아제나 님이 쓰신 글 :
: C++빌더 VCL에 보시면 InputBox() 라는 API가 있는데요 ^^; 질문답변 게시판에서 InputBox로 검색해보시고요.
:
: 그리고 배치 파일에 사용자 입력 값이 필요한 경우에는 대부분 파라미터로 처리합니다....
:
: 첫번째 파라미터는 %1 과 같이 표현하죠.
:
: 즉, 10번째 칼럼부터 자르기를 원하는 경우에는
:
: cut.bat 10
:
: 이런 식으로 명령을 주게 만들면 되지요.
:
: 만약에 10을 입력하지 않으면 사용법을 출력해주시고요.
:
: 이런식으로 하면 됩니다.
:
: if "%1"="" goto usage
: echo 파라미터가 있을 경우 배치 파일이 처리될 부분
: goto end
: :usage
: echo 프로그램 설명입니다. 파일명 [칼럼수]
: :end
:
: 그리고 프로그램에서 뭔가의 값을 받아서 배치 파일로 전달해주는 경우에 리턴값 처리는 ERRORLEVEL 이란 것을 사용하지요.
:
: C 프로그래밍
:
: test.c
:
: int main()
: {
: int ret;
: printf("숫자를 입력하세요? ");
: scanf("%d",&ret);
: return ret;
: }
:
: 배치 파일 프로그래밍
:
: test.bat
:
: @echo off
: test.exe
: if errorlevel 1 goto one
: if errorlevel 2 goto two
: echo 사용자 입력값(리턴값)이 1,2이 아닌 경우
: goto end
: :one
: echo 사용자 입력값이 1인 경우
: goto end
: :two
: echo 사용자 입력값이 2인 경우
: :end
:
:
: 사실 오래되어서 기억이 가물합니다 ㅡㅡ;
: 해당 소스가 틀릴 가능성도 있음에 유념하시기 바랍니다. (테스트 안 해봄)
:
:
:
: 정** 님이 쓰신 글 :
: : 저는 도스프롬프트(CMD) 에서 배치파일을 만들어서 폴더(하위폴더 모두포함) 속의 파일들의 경로가포함된 전체 경로가 사용자로부터 입력받은 수치 이상의 길이를 가지는 파일명들만 출력을 하도록하는 유틸을 만들려고 합니다.
: :
: : 기본적은 배치파일로 작성해야 될부분을 모두 만들었고 또 잘 작동되나 한가지 빠진것은 사용자로 부터 입력받은 길이 이상의 파일명들만 출력시킬 커트라인이 될 숫자 길이값을 입력받는 것이 아니라 배치파일 내에서 고정된 값을 할당하여야 되는 단점이 있습니다. 물론 배치파일의 'SET /P CUTLIN_NUM=커트라인될 파일의 길이를 입력하세요?'라는 기능을 이용해도 되지만 이것은 비쥬얼한 것이 아니라서 사실 보기도 싫고 사용도 불편합니다.
: :
: : 그래서 제가 잘 아는 배치파일을 최대로 살리면서 또 배치로는 단점이 있는 최소 부분만 C++빌더로 구현을 할려고 합니다.
: :
: : 즉 배치파일에서 C++빌더로 컴파일된 .EXE를 호출하여 커트라인될 숫자값을 사용자로 부터 비쥬얼하게 입력받고 그값을 배치로 리턴을 해주는 방식입니다.
: :
: : 아래는 구체적으로 알고자 하는부분입니다.
: :
: : C++빌더에서 사용자로부터 숫자값을 입력받는 인풋 박스를 출력하려고 합니다. 비베나 비베스크립트나 자바스크립에서는 InputBox() 혹은 Propmpt() 함수와 같이 간단하게 해결이 되는데 C++빌더에서는 찾기가 좀힘드네요.
: : 혹시 API로도 해결이 가능한가요 아니면 MFC까지 구현해야 하나요?
: : 이왕이면 제가 이해가 잘아는 API로만 구현을 해보았으면 하는데요.
: :
: : 헤드파일이나 리소스(RC) 파일를 포함해야 하는 프로젝트 파일을 만들어야 한다면 소스를 첨부파일이나 이메일로도 좀 올려 주십시오. Borland나 VC++이나 DEV C++,Relo2.0 등등 어떻한 형태의 프로젝트 팔일소스라도 상관없어니 좀 부탁드립니다.
: : 저의 이메일은 ssforyah@yahoo.co.kr 입니다.
: :
: :
: : 그럼 답변 부탁드립니다.
: :
: :
: : 아래는 추가적으로 제가 웹검색으로 기본 골격 까지만 겨우 만들어본 것인데 Inputbox의 겉모습은 만들었는데
: : OK버턴을 클릭했을때 텍스트박스에 입력되어있는 숫자값을 Return을 해야 하는데 어떻게 해야 하나요?
: : =========================================================================================
: :
: : #include <WINDOWS.H>
: : #include "Project1_res.h"
: :
: :
: : LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
: :
: : HINSTANCE g_hInst;
: :
: : LPSTR lpszClass="SubEdit";
: :
: :
: :
: : int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
: :
: : ,LPSTR lpszCmdParam,int nCmdShow)
: :
: : {
: :
: : HWND hWnd;
: :
: : MSG Message;
: :
: : WNDCLASS WndClass;
: :
: : g_hInst=hInstance;
: :
: :
: :
: : WndClass.cbClsExtra=0;
: :
: : WndClass.cbWndExtra=0;
: :
: : WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
: :
: : WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
: :
: : WndClass.hIcon=LoadIcon(NULL,IDI_QUESTION);
: :
: : WndClass.hInstance=hInstance;
: :
: : WndClass.lpfnWndProc=(WNDPROC)WndProc;
: :
: : WndClass.lpszClassName=lpszClass;
: :
: : WndClass.lpszMenuName=NULL;
: :
: : WndClass.style=CS_HREDRAW | CS_VREDRAW;
: :
: : RegisterClass(&WndClass);
: :
: :
: :
: : hWnd=CreateWindow(lpszClass,TEXT("검색할 파일명길이의 커트라인을 입력"),WS_CAPTION|WS_SYSMENU,
: :
: : 300,200,370,110,
: :
: : NULL,(HMENU)NULL,hInstance,NULL);
: :
: : ShowWindow(hWnd,nCmdShow);
: :
: :
: :
: : while(GetMessage(&Message,0,0,0)) {
: :
: : TranslateMessage(&Message);
: :
: : DispatchMessage(&Message);
: :
: : }
: :
: : return Message.wParam;
: :
: :
: : }
: :
: :
: :
: : #define ID_EDIT1 100
: :
: : #define ID_EDIT2 101
: :
: : HWND hEdit1, hEdit2;
: :
: : WNDPROC OldEditProc;
: :
: : LRESULT CALLBACK EditSubProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
: :
: : {
: :
: : switch (iMessage) {
: :
: : case WM_KEYDOWN:
: :
: : if (wParam==VK_RETURN) {
: :
: : return 10;
: :
: : }
: :
: : if (wParam==VK_TAB) {
: :
: : SetFocus(hEdit2);
: :
: : }
: :
: : break;
: :
: : // case WM_LBUTTONDOWN:
: :
: : // SendMessage(hWnd,EM_SETSEL,0,-1);
: :
: : // return 0;
: :
: : }
: :
: : return CallWindowProc(OldEditProc,hWnd,iMessage,wParam,lParam);
: :
: : }
: :
: :
: :
: : LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
: :
: : {
: :
: : PAINTSTRUCT ps;
: :
: : HDC hdc;
: :
: : char Mes[]="입력된 수치 이상의 파일명들을 출력합니다.";
: :
: : switch(iMessage) {
: :
: : case WM_CREATE:
: :
: : hEdit1=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
: : ES_AUTOHSCROLL,
: : 10,10,150,25,hWnd,(HMENU)ID_EDIT1,g_hInst,NULL);
: :
: : hEdit2=CreateWindow("button","확인",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
: : 260,10,50,25,hWnd,(HMENU)0,g_hInst,NULL);
: :
: : SetFocus(hEdit1);
: : OldEditProc=(WNDPROC)SetWindowLong(hEdit1,GWL_WNDPROC,(LONG)EditSubProc);
: : return 0;
: :
: : case WM_COMMAND:
: : if(LOWORD(wParam) == 0) {
: : MessageBox(hWnd,"입력된 이 값을 리턴해야 함.","Button",MB_OK);
: : PostQuitMessage(34);
: : return 0;
: : break;
: : }
: : return 0;
: :
: : case WM_PAINT:
: :
: : hdc=BeginPaint(hWnd, &ps);
: :
: : TextOut(hdc,10,40,Mes,strlen(Mes));
: :
: : EndPaint(hWnd, &ps);
: :
: : return 0;
: :
: : case WM_DESTROY:
: :
: : SetWindowLong(hEdit1,GWL_WNDPROC,(LONG)OldEditProc);
: :
: : PostQuitMessage(0);
: :
: : return 0;
: :
: : }
: :
: : return(DefWindowProc(hWnd,iMessage,wParam,lParam));
: :
: : }
|