배치 스크립트-디버깅

배치 파일을 실행할 때 종종 문제가 발생할 수 있으며 배치 파일 자체의 문제를 확인하기 위해 어떤 방식 으로든 배치 파일을 디버깅해야하는 경우가 많습니다. 다음은 배치 스크립트 파일을 디버깅하는 데 도움이 될 수있는 몇 가지 기술입니다.

오류 메시지

메시지의 출처를 찾으려면 다음 단계를 따르십시오.

Step 1 − @ECHO OFF 라인에서 REM, 즉 REM @ECHO OFF 또는 :: @ECHO OFF.

Step 2 − 필요한 명령 줄 매개 변수를 사용하여 배치 파일을 실행하고 나중에 비교할 수 있도록 모든 출력을 로그 파일로 리디렉션합니다.

test.bat > batch.log 2>&1

Step 3 − 오류 메시지에 대한 batch.log 파일 검색

Step 4− 예기치 않거나 잘못된 명령, 명령 줄 스위치 또는 값이 있는지 이전 줄을 확인합니다. 명령에 사용 된 환경 변수의 값에 특히주의하십시오.

Step 5 − 오류를 수정하고 모든 오류 메시지가 사라질 때까지이 과정을 반복하십시오.

복잡한 명령 줄

또 다른 일반적인 오류 원인은 잘못된 검색 문자열이 포함 된 "중첩 된"FIND 또는 FINDSTR 명령 (때로는 FOR / F 루프 내)과 같이 잘못 리디렉션 된 명령입니다.

이러한 복잡한 명령의 유효성을 확인하려면 다음 단계를 따르십시오.

Step 1 − 복잡한 명령 집합을 사용하는 줄 바로 앞에 "명령 확인 줄"을 삽입합니다.

다음은 첫 번째 TYPE 명령의 출력이 끝나고 다음 명령이 시작되는 위치를 표시하기 위해 ECHO 명령이 삽입 된 예입니다.

TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg 
| FIND 
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"

Step 2 − 위에서 설명한 오류 메시지 소스를 찾으려면 절차를 따르십시오.

Step 3− "단순화 된"명령 줄의 출력에 특히주의하십시오. 예상 된 형식의 출력입니까? "토큰"값 또는 위치가 예상대로입니까?

서브 루틴

오류 메시지를 생성하는 서브 루틴은 동일한 배치 파일에서 여러 번 호출 될 수 있으므로 오류의 원인을 찾는 데 추가 "문제"가 발생합니다.

서브 루틴에 대한 잘못된 호출의 원인을 찾으려면 다음 단계를 따르십시오.

Step 1 − 스크립트 시작 부분에 카운터 변수 추가 및 재설정 −

SET Counter = 0

Step 2 − 서브 루틴의 시작 부분에 다음 줄을 삽입하여 서브 루틴이 호출 될 때마다 카운터를 증가시킵니다.

SET /A Counter+=1

Step 3− SET 명령 만 포함하는 카운터 증분 바로 뒤에 다른 줄을 삽입합니다. 이것은 모든 환경 변수와 그 값을 나열합니다.

Step 4 − 위에서 설명한 오류 메시지 소스를 찾으려면 절차를 따르십시오.

Windows 버전

동일한 Windows 버전을 실행하거나 실행하지 않을 수있는 다른 컴퓨터에 배치 파일을 배포하려는 경우 가능한 한 많은 Windows 버전에서 배치 파일을 테스트해야합니다.

다음 예제는 관련 Windows 버전을 확인하기 위해 다양한 운영 체제 버전을 확인하는 방법을 보여줍니다.

@ECHO OFF
:: Check for Windows NT 4 and later

IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT

:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only