batch-file
모범 사례
수색…
소개
이 항목에서는 배치 파일에서 수행해야하는 작업 (필수 아님) 에 중점을 둡니다. 이러한 "모범 사례"를 사용하면 배치 파일의 효과와 기능을 향상시킬 수 있습니다.
인용 부호
대부분의 온라인 배치 스크립트에는 많은 인용문 문제가 있습니다.
예제 및 솔루션
예제 A
if %var%==abc echo Test
이 코드는 작동하는데 - %var%
의 내용에 공백이나 다른 특수 문자가 포함되어 있지 않습니다. 이제 %var%
에 공백이 하나 있다고 가정 해 봅시다. 이제 cmd.exe
봅니다.
if ==abc echo Test
cmd.exe
가이 구문을 인식하지 못하기 때문에 오류가 발생합니다.
솔루션 A
if "%var%"=="abc" echo Test
따옴표를 사용하면 cmd.exe
는 전체 %var%
(공백 및 특수 문자 포함)를 하나의 일반 문자열로 간주합니다. 그러나 이것은 가장 안전한 비교 방법이 아닙니다. 가장 안전한 방법은 echo
, pipe
및 findstr
입니다.
보기 B
cd C:\User\Spaced Name\Spaced FileName.txt
cd
는 디렉토리를 C:\User\Spaced
로 변경합니다. cd
는 하나의 경로 인수 만 허용하기 때문입니다.
솔루션 B
경로 주위에 따옴표를 추가하기 만하면 문제가 해결됩니다.
cd "C:\User\Spaced Name\Spaced FileName.txt"
set /a
문과 같이 따옴표를 사용하면 더 잘 작동하는 몇 가지 예제가 있습니다. 그러나 공백이나 특수 문자가 포함 된 문자열에서 작업 할 때는 따옴표를 사용하는 것이 일반적으로 안전합니다.
스파게티 코드
스파게티 코드는 많은 경우 혼동을 일으킬 수있는 코드 스 니펫을 의미합니다. GOTO
같은 예외 및 일관성없는 코드.
예제 및 솔루션
예제 A
@echo off
set /a counter=0
:Loop
set /a counter=%counter% + 1
echo %counter%
if %counter% equ 10 goto :exit
goto :Loop
:exit
이 프로그램은 점프가 많아서 스크립트가 정확히 무엇을하는지 알기가 더 어려워졌습니다.
솔루션 A
@echo off
for /l %%G in (0,1,10) echo %%G
GOTO
를 줄이면 코드 양이 크게 줄어들었고 실제 코드에 집중할 수 있습니다.
보기 B
다음 진술을 고려하십시오.
:endGame
if %player1Score% gtr %player2Score% goto :player1wins
if %player1Score% lss %player2Score% goto :player2wins
goto :tie
:player1wins
echo player 1 wins
goto :eof
:player2wins
echo player 2 wins
goto :eof
:tie
echo tie
goto :eof
이 스 니펫에는 많은 goto
문이 필요하며 디버깅하기가 혼란 스러울 수 있습니다. 이러한 명령문을 단순화하기 위해 call
명령을 사용할 수 있습니다. 더 좋은 조건에서 위의 스크립트가 있습니다.
:endGame
if %player1Score% gtr %player2Score% call :message player 1 wins
if %player1Score% lss %player2Score% call :message player 2 wins
if %player1Score% equ %player2Score% call :message tie
goto :eof
:message
echo %*
goto :eof
두 스크립트 모두 똑같은 결과를 출력하지만 새 스크립트는 훨씬 더 짧고 명확합니다.