이제 DOS 명령 배치 입문 2015
추가
결론적으로 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
Reference
이 문제에 관하여(이제 DOS 명령 배치 입문 2015), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yasumodev/items/c0387913b79d56d6fd52
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@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
@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
리디렉션 기호
<>
와 같은 제어 문자를 일반 문자로 취급하려면 바로 앞에 이스케이프 기호 ^
를 놓습니다. 다만, 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
Reference
이 문제에 관하여(이제 DOS 명령 배치 입문 2015), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yasumodev/items/c0387913b79d56d6fd52
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@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
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
Reference
이 문제에 관하여(이제 DOS 명령 배치 입문 2015), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yasumodev/items/c0387913b79d56d6fd52텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)