왜 레이블이 존재하더라도 "시스템이 지정된 배치 레이블을 찾을 수 없다"는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/232651

  •  04-07-2019
  •  | 
  •  

문제

Windows XP에서 배치 파일을 실행하는 동안 무작위로 발생하는 오류 메시지를 찾았습니다.

시스템은 배치 레이블이 지정된 이름_of_label을 찾을 수 없습니다

물론 레이블이 존재했습니다. 이 오류의 원인은 무엇입니까?

도움이 되었습니까?

해결책

실제로, 당신은 이런 일이 발생하기 위해서는 두 가지 조건이 필요합니다.

  • 배치 파일은 CRLF 라인 엔딩을 사용해서는 안됩니다
  • 점프하는 레이블은 블록 경계에 걸쳐 있어야합니다 (반대로 및 반대로 : End Label Wich는 스크립트 끝의 단순화입니다)

보다. 시스템은 지정된 배치 레이블을 찾을 수 없습니다 그리고 배치 캔!

다른 팁

전에는 같은 문제가 있습니다. 그러나 근본 원인은 전혀 CRLF가 아니 었습니다. 대본에서 나는 Ant와 같은 외부 프로그램을 실행했지만 CALL 개미 이전. 그러니 당신을 확인하십시오 CALL 배치 스크립트에 사용 된 모든 외부 프로그램.

다음은 문제와 해결 방법입니다. 이 문제는 DOS 배치 CMD 프로그램의 버그 또는 기능입니다. 먼저 명확한 문제 설명. ": dothis"와 같은 대상 레이블이있는 DOS 배치 파일이있는 경우, 레이블의 끝에 공간이없는 경우 라인 엔딩이 Unix 라인 엔딩 인 경우 배치 파일이 작동하지 않습니다. 이것은 당신이 그것을 사용하기 전에 파일에서 unix2DOS를 실행해야한다는 것을 의미합니다.

근본 원인은 DOS 명령 줄 프로세서 (Shell Program)이며, UNIX 끝 문자를 레이블의 일부로 간주합니다. Go To Part는 이것을 레이블로 사용하지 않기 때문에 그러한 레이블이 실제로 존재하지 않기 때문에 결코 찾을 수 없습니다. 해결책은 각 대상 레이블의 끝에 추가 공간을 두거나 모든 라인을 더 잘하는 것입니다. 우주는 공간이 분리기 역할을하고 모든 것이 작동하기 때문에 유니 닉스 끝이 재생되지 않습니다.

배치 파일에 유닉스 라인 엔딩 (라인 분리기)이 있으면 때때로 발생할 수 있습니다.

단지 UNIX2DOS 문제를 해결해야합니다.

또한 발신자의 환경에서 호출하는 대신 다른 스크립트를 호출 할 때 통화를 사용하는지 확인해야합니다.

지금 .CMD 파일과 Windows 8으로 비슷한 문제를 겪었습니다. 솔루션은 모든 라인 엔드를 CR+LF DOS 스타일로 변경하는 것이 었습니다. 배치 파일이 대부분 작동하고 회선을 재 배열하여 효과가 변경 되었기 때문에 문제는 혼란 스러웠습니다.

.cmd 파일은 다음과 같습니다.

call:function_A "..\..\folderA\"
call:function_B "..\..\folderB\"
call:function_C "..\..\folderC\"
call:function_D "..\..\folderD\"
goto:eof

:function_A
rem do stuff
goto:eof

...etc...

함수 C는 "시스템이 지정된 배치 레이블을 찾을 수 없다"는 오류를 일으킨다. 이상하게도 통화를 재정렬하여 사라질 수 있습니다. 라인 엔드를 0x0A에서 0x0D0A로 변경하면 고정 된 것으로 보입니다.

아마도 Vonc은 "배치 파일은 CRLF 라인 엔딩을 사용해야한다"는 것을 의미했습니다.

Word에서 시작 명령을 복사 한 후이 문제가 발생하여 명령 창에 붙여 넣었습니다. "-"전면에 옵션이 있었고, DOS와 같은 외모를 생각했습니다. "-"그것은 "-"-"-"-"직접 문제가 해결되고 배치가 작동했습니다 ... 열심히 일했습니다. 문제를 찾으려면 ....

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top