Thursday, May 31, 2007
배치 파일에서, 숫자 계산하기, set 명령으로 더하기 빼기; Batch File Calc
오리지날 16비트 도스(MS-DOS)의 배치파일 문법에서는 안되지만, 윈도우2000/XP 이상의 윈도우 도스창(정식 명칭은, 명령 프롬프트;cmd.exe)에서는, set 명령에 /a 옵션을 붙이면 간단한 계산기로 사용할 수 있습니다. 그리고 배치 파일 내에서 숫자 계산이 필요한 경우에 set 명령으로 계산을 할 수 있습니다. 배치 프로그래밍에 유용합니다.
set /a 변수명=수식
의 형식입니다. 그러나 아주 간단한 가감승제만 할 수 있을 뿐이지 좀 복잡한 계산은 불가능합니다.
배치 파일 외부에서는, 변수에 대입할 필요 없이
set /a 1+1
이렇게만 해도 2라는 답이 나옵니다. 계산 결과가 그리 정밀하지 않기 때문에 일반 계산기 대용으로 쓰면 심한 오차가 발생하는 경우가 있습니다.
set 명령의 계산 기능을 사용하여, 루프문의 실행 회수를 제어하는 예제: ▶▶ 배치파일 무한루프 구현, 루프 탈출, 빠져 나오기 예제; Batch File Infinity Loop
set /a 변수명=수식
의 형식입니다. 그러나 아주 간단한 가감승제만 할 수 있을 뿐이지 좀 복잡한 계산은 불가능합니다.
배치 파일 계산기 예제 소스
배치 파일명: example.bat@echo off
rem 1 더하기 1 계산
set /a mytest=1+1
echo %mytest%
rem 출력 결과: 2
rem 2 곱하기 3 계산
set /a mytest=2*3
echo %mytest%
rem 출력 결과: 6
rem 100 나누기 3 계산
set /a mytest=100/3
echo %mytest%
rem 출력 결과: 33
rem 33.333...이 나와야 하지만 소수점 없이 정수로 출력됩니다.
rem 변수 지우고 종료
set mytest=
rem 1 더하기 1 계산
set /a mytest=1+1
echo %mytest%
rem 출력 결과: 2
rem 2 곱하기 3 계산
set /a mytest=2*3
echo %mytest%
rem 출력 결과: 6
rem 100 나누기 3 계산
set /a mytest=100/3
echo %mytest%
rem 출력 결과: 33
rem 33.333...이 나와야 하지만 소수점 없이 정수로 출력됩니다.
rem 변수 지우고 종료
set mytest=
배치 파일 외부에서는, 변수에 대입할 필요 없이
set /a 1+1
이렇게만 해도 2라는 답이 나옵니다. 계산 결과가 그리 정밀하지 않기 때문에 일반 계산기 대용으로 쓰면 심한 오차가 발생하는 경우가 있습니다.
set 명령의 계산 기능을 사용하여, 루프문의 실행 회수를 제어하는 예제: ▶▶ 배치파일 무한루프 구현, 루프 탈출, 빠져 나오기 예제; Batch File Infinity Loop
tag: batch
배치파일 | DOS CMD BATCH .BAT | VBScript .VBS
심심해서 또 올려봐요.
:: main.cmd/
:: 지역변수 지정
setlocal
set MY_STR0=global
call sub.cmd
echo.====================================
echo main.cmd : MY_STR0=%MY_STR0%
echo.====================================
endlocal
:: /main.cmd
:: sub.cmd/
echo. ====================================
echo sub.cmd : MY_STR0=%MY_STR0%
echo. ====================================
:: 지역변수 지정
setlocal
echo. ====================================
echo sub.cmd : MY_STR0=%MY_STR0%
echo. ====================================
set MY_STR0=local
echo. ====================================
echo sub.cmd : fix : MY_STR0=%MY_STR0%
echo. ====================================
:: Call
call subsub1.cmd
endlocal
echo. ====================================
echo sub.cmd : MY_STR0=%MY_STR0%
echo. ====================================
:: /sub.cmd
:: subsub1.cmd/
echo. ====================================
echo subsub1.cmd : MY_STR0=%MY_STR0%
echo. ====================================
:: 지역변수 지정
setlocal
echo. ====================================
echo subsub1.cmd : MY_STR0=%MY_STR0%
echo. ====================================
set MY_STR0=subsub1local
echo. ====================================
echo subsub1.cmd : fix : MY_STR0=%MY_STR0%
echo. ====================================
endlocal
echo. ====================================
echo subsub1.cmd : MY_STR0=%MY_STR0%
echo. ====================================
:: /subsub1.cmd
:: PRINT/
====================================
sub.cmd : MY_STR0=global
====================================
====================================
sub.cmd : MY_STR0=global
====================================
====================================
sub.cmd : fix : MY_STR0=local
====================================
====================================
subsub1.cmd : MY_STR0=local
====================================
====================================
subsub1.cmd : MY_STR0=local
====================================
====================================
subsub1.cmd : fix : MY_STR0=subsub1local
====================================
====================================
subsub1.cmd : MY_STR0=local
====================================
====================================
sub.cmd : MY_STR0=global
====================================
====================================
main.cmd : MY_STR0=global
====================================
:: /PRINT
<< Home