이제 DOS 명령 배치 입문 2015

8254 단어 batdos
DOS 명령에 의한 배치 파일의 사용법 정리. 평상시는 사용하지 않지만, 막상이라고 할 때 사용할 수 있으면 조금 편리하기도 하다. 다만, 재차 문법을 조사해 보니 오히려 전위적이라고 할 수 있는 정도 혼돈이기도 했다.

추가
결론적으로 DOS 명령에서 파일을 읽고 쓰는 것은 권장하지 않습니다. 문자 코드가 원칙 Shift_JIS만인 것과 파일중에 제어 기호가 포함되어 있다고 예상외의 처리를 하는 일이 있기 때문입니다. WSH (VBScript, JScript) 및 PowerShell이 ​​더 적합합니다.

기본 1 : set (변수에 값을 설정)



· 변수에 할당 set NAME=太郎· 변수 참조 echo.%NAME%수식을 대입 set /A NUM=1+2+3+4/A 옵션은 오른쪽을 수식으로 평가합니다. 또한 echo는 화면 출력이지만 위의 예에서 %NAME%가 빈 문자이면 오류 메시지가 표시됩니다. 그것을 막기 위해 echo. 와 점을 붙이도록 합시다.

test.bat
@echo off

set STR=Hello
set STR=%STR% World
set NUM=3
set /A NUM=%NUM%+5
set /A NUM+=2

echo.%STR%
echo.%NUM%
pause

실행 결과
Hello World
10

또 하나 중요한 것은 위의 변수는 for문 안 등에서는 상수처럼 동작합니다. 즉, for문을 실행하기 전에 %変数%가 정적으로 확장됩니다. 실행 중에 값을 변경하려면 setlocal enabledelayedexpansion 를 선언합니다. 지연 환경 변수라고 불리는 것 같습니다. 그리고 변수를 참조할 때는 !変数! 와 같이 느낌표로 묶습니다.

test.bat
@echo off
setlocal enabledelayedexpansion

set SUM=0
for /L %%i in (0, 1, 10) do (
    set CNT=%%i
    set /A SUM=!SUM!+!CNT!
)
echo.!SUM!
pause

실행 결과
55

추가
다만 문제점으로서, 지연 환경 변수가 유효의 경우, 문자 변수중의 느낌표가 제어 기호 취급이 되어 느낌표가 소실되어 버리므로 요주의입니다.

기본 2: 이스케이프



리디렉션 기호 <>와 같은 제어 문자를 일반 문자로 취급하려면 바로 앞에 이스케이프 기호 ^를 놓습니다. 다만, set 이나 echo 처리에서는 그 때마다, 이스케이프 기호가 소비되기 (?) 때문에, 여분으로 기술해 둘 필요가 있는 것 같습니다…. 하지만, 지연 환경 변수에서는 그 필요는 없는 것 같습니다… 혼돈의 사양이군요 ....

test.bat
@echo off
setlocal enabledelayedexpansion

::通常の環境変数の場合

set AAA=^^^<AAA^^^>
echo.%AAA%

set BBB=^^^<BBB^^^>
echo.%BBB%>>out.txt

::遅延環境変数の場合

set CCC=^<CCC^>
echo.!CCC!

set DDD=^<DDD^>
echo.!DDD!>>out.txt

pause

실례 1: 텍스트 파일을 읽고, 3행째만 줄머리에 「AHO」를 추기



test.bat
@echo off
setlocal enabledelayedexpansion

set FILENAME=test.txt
set CNT=0
for /f "delims=" %%S in (%FILENAME%) do (
    echo.CNT=!CNT!
    if !CNT!==0 (
        call>%FILENAME%
    )
    set /A CNT=!CNT!+1
    if !CNT!==3 (
        echo.AHO%%S>>%FILENAME%
    ) else (
        echo.%%S>>%FILENAME%
    )
)
pause

예 2 : 텍스트 파일을 읽고 3의 배수 행만 줄 머리에 "AHO"를 추가



test.bat
@echo off
setlocal enabledelayedexpansion

SET FILE_IN=test.txt
for /f "tokens=1* delims=: eol=" %%R in ('findstr /n "^" %FILE_IN%') do (
    echo.ROW=%%R
    if %%R==1 (
        call>%FILE_IN%
    )
    set /A AMARI=%%R%%3
    if !AMARI!==0 (
        echo.AHO%%S>>%FILE_IN%
    ) else (
        echo.%%S>>%FILE_IN%
    )
)
pause

좋은 웹페이지 즐겨찾기