Why “The system cannot find the batch label specified” is thrown even if label exists?

后端 未结 9 1197
后悔当初
后悔当初 2020-11-30 02:48

While running a batch file in Windows XP I have found randomly occurring error message:

The system cannot find the batch label specified name_of_label

相关标签:
9条回答
  • 2020-11-30 03:15

    I encountered a similar issue just now with a .cmd file and Windows 8. The solution was to change all line endings to CR+LF DOS style. The issue was confusing because the batch file mostly worked and rearranging lines changed the effect.

    The .cmd file looked like:

    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...
    

    Function C would cause error "The system cannot find the batch label specified". Strangely it could go away by rearranging the calls. Changing line endings from 0x0A to 0x0D0A seems to have fixed it.

    Perhaps VonC meant "the batch file must use CRLF line endings".

    0 讨论(0)
  • 2020-11-30 03:15

    i had this issue after copying a start command from word and paste it into the command window. There was a option with "-" on front, and thought the looks the same as the DOS "-" it wasn't :) After typing the "-" by myself the issue was solved and the batch worked ... a hard to find issue ....

    0 讨论(0)
  • 2020-11-30 03:19

    I have got the same issue before. However, the root cause was not CRLF at all. It was because in the script I executed an external program such as Ant, but did not put a CALL before Ant. So, make sure you CALL every external program used in your batch script.

    0 讨论(0)
  • 2020-11-30 03:20

    You should also make sure that when calling other scripts you use CALL, instead of calling them in the caller's environment.

    0 讨论(0)
  • 2020-11-30 03:21

    Actually, you need 2 conditions for this to happen:

    • the batch file must not use CRLF line endings
    • the label you jump to must span a block boundary (as opposed to and :end label wich is just a shortcut to the end of your script)

    See. The system cannot find the batch label specified (by and Batch-as-batch-can!

    David A. Gray mentions in the comments seeing (on Windows 10) what Marshal's answer showed in 2014 (presumably on Windows 7 or 8): a script/batch program (.bat or .cmd) executed without CALL would trigger an eol conversion.

    I've written hundreds of batch scripts over the last 35 years, and the only time I've ever had an issue with labels not being found was when the file's line breaks got converted from Windows (CR/LF), which works, to Unix (LF), which doesn't.


    Feb. 2020, kinar adds in the comments:

    Just encountered this issue on a Win7 machine.
    Turns out this error can also be generated when trying to CALL another .bat file if that file doesn't exist on the system.
    In my case, I was trying to call the Visual Studio vcvarsall.bat file on a system without VS installed.

    See jeb's answer for more: it was a case of an undefined label.

    0 讨论(0)
  • 2020-11-30 03:23

    There are multiple possible ways to get the error.

    1. Described by VonC - Wrong line endings, LF instead of CR/LF

    2. Obscure long lines (if that happens accidential, your code is incredible worse)

    3. Direct start another batch after calling a function.
      Sample:

      @echo off
      call :func
      echo back from second
      exit /b
      :func second.bat echo NEVER COME BACK HERE
      This unexpectedly tries to goto to the label :func in second.bat.
      But this can be (mis)-used to directly call labels in another batch file

    This is the described behaviour of the answer of Marshal

    0 讨论(0)
提交回复
热议问题