728x90

환경 변수를 사용자에게 입력 받아 받은 값으로 해당 명령을 실행 하도록 만들 수 있습니다. 
우선 환경 변수를 입력 받는 방법을 간단히 보면

C:\>set /p moon= (엔터)
달 (달이라고 입력 후 엔터)

C:\>echo %moon% (엔터)
달 (이건 출력된 결과)

C:\>

set 명령으로 변수를 지정합니다. /P 스위치는 변수의 값을 사용자가 입력한 입력 줄에 설정하도록 합니다
자세한 것은 환경변수 도움말을 참고하시는데 저도 뭔소린지 잘 몰라요 =_=

 

Set 명령 - 환경 변수 설정 도움말

봐도 봐도 먼소린지 잘 모르겠고... 쓰는것만 쓰니 참 알다가도 모르겠습니다 cmd.exe 환경 변수를 보여주거나 설정하거나 지웁니다. SET [변수=[문자열]] 변수 환경 변수 이름을 지정합니다. 문자열 변수에 할당..

moonth.tistory.com

눈으로 보는게 빠르니 간단하게 어떻게 구성하는지 보면

@echo off
@echo ==============================
@echo               1. 시간 보기                    
@echo               2. 날짜 보기                    
@echo               3. 종료                          
@echo ==============================

:TOP
set /p choice=보고 싶은 항목을 선택 해주세요 : 

goto %choice%

:1
time /t
goto TOP

:2
date /t
set /p choice=보고 싶은 항목을 선택 해주세요 :  
goto %choice%

:3
Exit

echo는 뭐 다 아실꺼고요 콜론 표시로 내가 포인트를 알아보기 쉽게 지정합니다. 이 명령줄은 간단히 사용자가 입력 한 것대로 이동하기 때문에 포인트를 사용자가 입력한 값 그대로 움직이도록 하였습니다. 그래서 번호를 선택하게 유도하고 그 번호 그대로 지정되어있는 포인트로 이동합니다.

set /p 명령으로 변수를 입력 받고요 그 아래 goto 명령과 choice 에 지정된 변수를 가지고 갈 곳을 정합니다
그리고... 자세히 보시면 지정된 포인트 1과 2가 명령이 약간 다른걸 볼수 있습니다.
1번 명령은 1번으로 이동하고 시간을 보여준 뒤에 다시 top으로 올라가 명령을 실행합니다. 그럼 선택하라는 메시지가 다시 나오겠죠?
2번 명령은 날짜를 보여주고 set 명령으로 변수 입력을 바로 받습니다. 사용 방법은 달랐지만 결과는 똑같습니다.

궁금하면 만들어서 해보세요 ^^;;

728x90
728x90

배치 파일 cmd에서 루프 명령은 간단히 구성 가능합니다. if 명령문이 들어가면 골치 아파지는데 loop까지는 괜찮습니다 +_+

우선 명령문에 처음 시작 이름을 멀로 할까요... 되돌아와주길바래로 하겠습니다
그럼 세팅을 이렇게 합니다

:되돌아와주길바래

앞에 콜론 표시 보이시죠 : 콜론 되돌아와주길바래 입니다.
자 그럼 뭔가 눈에 보이게끔 반복되는게 느껴지도록 숫자 수식을 넣어보겠습니다. 저번에 포스팅 한 환경변수를 이용해서 숫자를 증가시켜볼께요 변수는 M 이라 하겠습니다.

set /a M+=1

위 명령에 대한 설명은 저번 포스팅으로 대체 하겠습니다.

 

Set 환경 변수 명령 /a 스위치 설명

/a 스위치는 오른쪽에 나오는 문자열이 수식임을 나타냅니다 수식을 살펴보면 약간 패턴을 알 수 있는데요 환경 변수를 M 이라 설정한다고 가정하겠습니다. set /a M+=1 M에 1을 더한 후 새로운 M 값을 저장 set /..

moonth.tistory.com

M값을 알기 위해 echo 명령으로 반복이 현재 루프가 몇번째 반복인지 표시해 줍니다.

echo %M%번째 루프입니다 

마지막으로 명령을 다시 처음으로 돌리기위해 지정 포인트로 이동하도록 goto 명령을 넣어줍니다.

goto 되돌아와주길바래

이제 합처서 가동 해볼까요

@echo off
:되돌아와주길바래
set /a M+=1
echo %M%번째 루프입니다
goto 되돌아와주길바래

이렇게 하면 되돌아와주길바래 가 시작 지점이고 그 아래 M이 +1 이 되고 그 아래 M이 몇인지 표시해주며 goto 명령으로 위에 있는 :되돌아와주길바래 로 이동하고 다시 그 아래 명령이 실행 되고 그 또 다시 goto 명령이 실행됩니다. 

위 명령을 배치 파일에 붙여넣어 실행 해 보세요 어떻게 되는지...
저 goto 명령으로 배치 파일에 선택 메뉴도 만들 수 있겠네요. 

728x90
728x90

/a 스위치는 오른쪽에 나오는 문자열이 수식임을 나타냅니다 수식을 살펴보면 약간 패턴을 알 수 있는데요 환경 변수를 M 이라 설정한다고 가정하겠습니다.

set /a M+=1 M에 1을 더한 후 새로운 M 값을 저장
set /a M-=1  M에 1을 뺀 후 새로운 M 값을 저장 
set /a M*=1   M에 1을 곱한 후 새로운 M 값을 저장 
set /a M/=1  M를 1으로 나눈 값을 새로운 M 값에 저장 
set /a M%=1 M를 1으로 나눈 나머지 값을 새로운 M 값에 저장

cmd 창을 열어서 아래 명령을 계속 입력해보세요 그럼 숫자가 계속 올라갑니다.

set /a M+=1

 

728x90
728x90

봐도 봐도 먼소린지 잘 모르겠고... 쓰는것만 쓰니 참 알다가도 모르겠습니다

cmd.exe 환경 변수를 보여주거나 설정하거나 지웁니다.

SET [변수=[문자열]]

  변수      환경 변수 이름을 지정합니다.
  문자열    변수에 할당할 문자열을 지정합니다.

매개 변수 없이 'SET'이라고 입력하면, 현재 환경 변수를 볼 수 있습니다.

명령 확장을 사용하면 SET는 아래와 같이 바뀝니다.

SET 명령은 변수 이름만으로 호출되며, = 기호나 값으로
그 변수의 값을 표시하지는 않습니다. 예를 들어,

    SET P

는 문자 'P'로 시작되는 모든 변수를 표시합니다.

SET 명령은 변수 이름을 현재 환경에서 찾을 수 없으면
ERRORLEVEL을 1로 설정합니다.

SET 명령에서는 환경 변수 이름에 = 기호를 사용할 수 없습니다.

SET 명령에는 아래와 같이 새로운 두 개의 스위치가 추가됩니다.

    SET /A 표현식
    SET /P 변수=[promptString]

/A 스위치는 = 기호의 오른쪽에 있는 문자열이
수식임을 지정합니다. 이는 계산되어 문자열로 변환되거나
지정한 변수의 새 값으로 만들어진 결과입니다.
표현식 평가기는 매우 간단하며 아래 연산을 지원합니다.

    ()          - 그룹 짓기
    ! ~ -               - 단일 연산자
    * / %               -  산술 연산자
    + -                 - 산술 연산자
    << >>               - 논리 이동
    &                   - 비트단위 and
    ^                   - 비트단위 상호 배제 or
    |                   - 비트단위 or
    = *= /= %= += -=    - 할당
      &= ^= |= <<= >>=
    ,                   - 식 구분 기호

논리 연산자를 사용하면 표현식 문자열을 인용 부호로 묶어야
합니다.  표현식에서 숫자가 아닌 문자열은 환경 변수 문자열로
취급하며, 그 값은 사용하기 전에 숫자로 변환됩니다. 환경 변수 이름이
지정되었지만 현재 환경에서 정의되지 않았으면 0 값이 사용됩니다.
이렇게 하면 환경 변수 값을 가져오기 위해 % 기호를
모두 입력할 필요 없이 환경 변수 값으로 산술 연산을 수행할 수
있습니다. 명령 스크립트 밖의 명령줄에서 SET /A를 실행하면,
표현식의 마지막 값이 표시됩니다. 할당 연산자의 왼쪽에
환경 변수 이름이 있어야 합니다.  숫자 값은 아무 접두어가 없으면
십진수이며, 접두어 0x는 16진수, 0은 8진수를
나타냅니다. 그러므로 0x12, 18은  022와 같습니다.
8진수는 혼동될 수 있다는 것에 주의하십시오: 08과 09는 
 8, 9가 올바른 8진수가 아니므로 잘못된 수 입니다.

/P 스위치는 변수의 값을 사용자가 입력한 입력 줄에 설정하도록 
허용합니다. 입력 줄을 읽기 전에 지정한 promptString을 표시합니다. 
PromptString을 비워 둘 수 있습니다.

환경 변수 대체를 다음과 같이 확장했습니다:

    %PATH:str1=str2%

은(는) "str2" 문자열을 가진 확장된 결과에 나타나는 각 "str1" 문자열을 
대체하는 PATH 환경 변수를 확장합니다. 확장된 출력에 나타나는 모든 
"str1" 문자열을 효과적으로 삭제하기 위해 "str2" 문자열을 비어둘 수
있습니다. "str1" 문자열이 별표(*)로 시작할 수 있습니다. 이 경우에는 
확장된 출력의 시작 부분에서부터 str1의 나머지 부분의 첫 문자열까지의 
모든 문자열을 일치시킵니다.

또한 확장용 하위 문자열을 지정할 수 있습니다.

    %PATH:~10,5%

은(는) PATH 환경 변수를 확장한 다음 확장된 결과의 11(10 오프세트)번째 
문자에서 시작한 5 문자만 사용합니다. 길이를 지정하지 않으면 기본값을 
변수 값의 나머지로 지정합니다. 두(오프세트 또는 길이) 수 모두 음수이면, 
사용한 수는 오프세트 또는 지정한 길이에 추가된 환경 변수 값의 
길이입니다.

    %PATH:~-10%

은(는) PATH 변수의 마지막 10 문자를 추출합니다.

    %PATH:~0,-2%

은(는) PATH 변수의 2 문자만 제외한 모든 문자를 추출합니다.

지연된 환경 변수 확장명에 대한 지원이 추가되었습니다.  이 지원은 항상
기본적으로 사용할 수 없지만 /V 명령줄을 CMD.EXD로 전환하여 사용할 수 있거나
사용할 수 없게 될 수 있습니다.  CMD /?를 참조하십시오.

지연된 환경 변수 확장명은 텍스트의 줄을 실행할 때가 아니라 
읽을 때 발생한 현재 확장명의 한계를
극복하는데 유용합니다.  다음 예제는
직접 변수 확장명에 나타나는 문제를 보여줍니다:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "%VAR%" == "after" @echo If you see this, it worked
    )

양쪽 IF 설명에 있는 %VAR%가
첫 번째 IF 설명을 읽을 때 대체되고
논리적으로 복합문인 IF의 본문을 포함하기 때문에 메시지를
표시하지 않습니다. 그래서 복합문에 있는 IF가 결코 같을 수 없는
"before"과 "after"를 비교하고 있습니다.  유사하게, 다음 예제는
예상한 것처럼 작업하지 않습니다:

    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%

현재 디렉터리에 파일 목록을 만들지 않지만,
대신 LIST 변수를 최근에 찾은 파일에 설정합니다.
다신 한번, 이것은 %LIST% 변수가 FOR 설명을 읽을 때
한번 확장되었고 그때 LIST 변수가 비었기 때문입니다.
실행하고 있는 실제 FOR loop는:

    for %i in (*) do set LIST= %i

이것은 LIST를 최근에 찾은 파일에 설정합니다.

 지연된 환경 변수 확장명은 실행 시간에 환경 변수를
확장하도록 다른 문자(느낌표)를 사용하도록
허용합니다.  지연된 변수 확장명을 사용할 수 있으면,
위의 예제가 의도된 대로 다음과 같이 작업하도록 쓰여질 수 있습니다:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "!VAR!" == "after" @echo 이렇게 되면
    )

    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%

명령 확장을 사용하면 확장될 수 있으나 SET에 의해
표시되는 변수 목록에 나타나지 않는 몇몇의
동적 환경 변수가 있습니다. 이 변수 값은
변수 값이 확장될 때마다 동적으로 계산됩니다.
사용자가 변수를 이 이름 중 하나로 분명하게 정의하면
이 정의가 아래에 설명된 동적 변수를 무시합니다:

%CD% - 현재 디렉터리 문자열로 확장합니다.

%DATE% - DATE 명령과 같은 포맷을 사용하여 현재 날짜로 확장합니다.

%TIME% - TIME 명령과 같은 포맷을 사용하여 현재 시간으로 확장합니다.

%RANDOM% - 0과 32767 사이에 있는 임의 숫자로 확장합니다.

%ERRORLEVEL% - 현재 ERRPRLEVEL 값으로 확장합니다

%CMDEXTVERSION% - 현재 명령 프로세서 확장자 버전 번호로
    확장합니다.

%CMDCMDLINE% - 명령 프로세서를 호출하는 원본 명령줄로
    확장합니다.

%HIGHESTNUMANODENUMBER% - 이 컴퓨터의 최고 NUMA 노드 수로
    확장합니다.

728x90
728x90

내가 선택한 파일을 어떤 커맨드 명령에 적용하고 싶다 하면 매번 커맨드 명령을 복사 붙여넣기 하거나 타이핑을 한다면 매우 불편합니다. 이때 내가 선택한 파일을 미리 만들어 둔 배치 파일에 드랍 (bat 파일 아이콘 위에 실행 할 파일을 드레그 & 드랍하여 겹쳐 놓는 것) 하여 실행 한다면 매우 편리할 것 입니다.
예전에 이 방법을 몰랐을 때는 명령줄을 command에 붙여 넣고 경로를 경로를 수정하여 실행 시켰습니다.

하나 예시가 있다면 ( 뭐 이렇게 쓰는 일은 없지만 ) 파일 삭제를 해보겠습니다.

cmd에서 삭제 명령은 ​del 이죠

​> del “파일

이런 식입니다.

배치 명령을 만들면 똑같이 ​del “파일” 입니다.
배치 명령에 인수를 적용하면 어느 파일이든지 배치 파일 위에 다른 파일을 겹치면 그 파일 경로가 인수에 적용되어 명령줄이 실행 됩니다.
만드는 예시를 보면 매우 간단합니다

​del “%1”

끝!!

원래 인수는 %1==ABCD 뭐 이런식으로 주고 다른 명령줄에서 %1 이라고 입력하면 ABCD와 같은 것으로 인식 되죠? 인수를 지정 없이 저렇게 만든 배치 파일은 드랍 한 파일을 인수에 넣어준다고 보면 됩니다.

좀더 어려운걸로 넘어갈께요
회사에서 이사람 저사람 공유 주고 왔다 갔다 하다보면 지워지지 않는 파일이 생기거나 액세스 거부 된 파일이 발생되는데 이런 파일이 발생 되었을 때 미리 만들어둔 배치 명령으로 오류를 해결 한다면 다음과 같습니다

​takeown /f “%1” /r
icacls “%1” /grant Administrators:F /T


takeown 명령은 소유권을 복구 해주는 명령이고 icacls 명령은 권한과 상속에 관한 명령입니다. “%1” 인수로 드랍만 해주면 파일이나 폴더에 적용 되지요.

생각 해보면 다양한 방법으로 활용할 수 있습니다

728x90

+ Recent posts