C:\>copy con batch.bat
echo Hello world > test.txt
dir /b
type test.txt
pause
del test.txt
dir /b
^Z -> ctrl +z -> enter
1개 파일이 복사되었습니다.
-------
C:\>copy con echo.bat
echo sec
@echo sec
@echo. -> 한칸 띄우기
@echo off
echo sec
^Z
1개 파일이 복사되었습니다.
C:\>echo.bat
C:\>echo sec
sec
sec
sec
----------------------
C:\>copy con aa.bat
@echo off
set name=aaaa
set /p first=첫번째값을 입력하세요.
set /p second=두번째 값을 입력하세요 :
set /a sum=first+second
echo.
echo 당신의 이름은 %name%입니다.
echo %first% + %second% = %sum%
^Z
1개 파일이 복사되었습니다.
C:\>aa.bat
첫번째값을 입력하세요.1
두번째 값을 입력하세요 :2
당신의 이름은 aaaa입니다.
1 + 2 = 3
C:\>
set 변수명 -> 변수 선언
%변수명% -> 선언된 변수를 사용
set /a 변수명 -> 변수를 숫자형으로 선언
set /p 변수명 -> 입력받은 문자를 변수에 할당
-----------------
@echo off
set var=0123456789
echo %var% -> 0123456789
echo %var:123=abc% -> 0abc456789
echo %var:123=% -> 0456789
echo %var:~0% -> 0123456789
echo %var:~-5% -> 56789
echo %var:~0,3% -> 012
echo %var:~0,-3% -> 0123456
echo %var:~-3,5% -> 789
echo %var:~-3,-1% -> 78
^Z
1개 파일이 복사되었습니다.
C:\>set1.bat
0123456789
0abc456789
0456789
0123456789
56789
012
0123456
789
78
-----------------------------
매개 변수
파일 실행시 파일명과 함께 입력하는 확장 변수
@echo off
echo %0 : %0 -> 0번지
echo %1 : %1 -> 1번지 인자
echo %1 %2 : %1 %2 -> 2번지 인자
echo %* : %* -> 모두 출력
C:\>argv 1 2 3
argv : argv
1 : 1
1 2 : 1 2
1 2 3 : 1 2 3
--------------
GOTO
레이블을 사용하여 특정 레이블로 이동한 후 스크립트를 계속 실행한다
@echo off
echo 1
echo 2
goto :next
echo 5
:next
echo 3
echo 4
C:\>goto.bat
1
2
3
4
--------------
CALL
레이블을 사용하여 특정 레이블을 호출하여 사용한다
호출한 후 돌아와서 다시 순차적으로 실행
@echo off
echo 1
echo 2
call :next
echo 5
:next
echo 3
echo 4
C:\>call.bat
1
2
3
4
5
3
4
-----------------------
if 구문
제어문으로 특정 조건이 참인지 거짓인지에 따라 다른 명령어를 실행한다
@echo off
if "%1" EQU "aaaa" (
echo aaaa!!
) else ( -> 띄어쓰기 안 하면 안 됨
echo Not aaaa!!
)
C:\>if.bat 1
Not aaaa!!
C:\>if.bat aaaa
aaaa!!
-> 옵션을 따로 넣지 않으면 대소문자 구분함
-> if/i -> 대소문자에 관계없이 문자열 비교
!=! 문자열이 다르면 수행
조건1 EQU 조건2 --> =
조건1 NEQ 조건2 --> <>
조건1 LSS 조건2 --> <
조건1 LEQ 조건2 --> <=
조건1 GTR 조건2 --> >
조건1 GEQ 조건2 --> >=
-----------------------------
@echo off
setlocal -> 지역변수
set /p number=number :
if %number% GEQ 5 (
if %number% LEQ 10 (
set ok=ok
)
)
if "%ok%"=="ok" (
echo %number%
) else (
echo Not Range!
)
C:\>if2.bat
number :1
Not Range!
C:\>if2.bat
number :4
Not Range!
C:\>if2.bat
number :7
7
------------------------
FOR
for %변수명 in (범위) do (
명령어
)
@echo off
for %%i in (a b c) do (
echo %%i
)
C:\>for.bat
a
b
c
-------------------------
@echo off
for %%a in (test.txt) do echo %%a
for /f %%a in (test.txt) do echo %%a
---------
sum
set /a 변수=수식
set B=5
set /a B=B+3
echo %B%
= *= /= %= += -= - 할당
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
-----------------
@echo off
set ss=0
for /l %%a in (1,1,100) do (
set /a ss+=%%a
)
echo %ss%
C:\>1.bat
5050
@echo off
set ss=0
for /l %%aa in (1,1,100) do (
set /a ss+=%%aa
)
echo %ss%
C:\>1.bat
%aa은(는) 예상되지 않았습니다.
-> 변수인식이 잘 안 되는 미스테리, 버그인가?
'System ' 카테고리의 다른 글
understanding utf -8 (video clip) (0) | 2015.06.21 |
---|---|
shell programming 2 (0) | 2014.10.13 |
stack / heap bof (0) | 2014.10.02 |
nop BOF (0) | 2014.10.01 |
basic start of BOF (0) | 2014.09.30 |