Por qué & # 8220; El sistema no puede encontrar la etiqueta de lote especificada & # 8221; Se lanza incluso si existe etiqueta?

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

  •  04-07-2019
  •  | 
  •  

Pregunta

Mientras ejecutaba un archivo por lotes en Windows XP, he encontrado un mensaje de error que aparece al azar:

  

El sistema no puede encontrar la etiqueta de lote especificada name_of_label

Por supuesto que existía la etiqueta. ¿Qué causa este error?

¿Fue útil?

Solución

En realidad, necesitas 2 condiciones para que esto ocurra:

  • el archivo por lotes no debe usar finales de línea CRLF
  • la etiqueta a la que salta debe abarcar un límite de bloque (a diferencia de y: etiqueta final que es solo un acceso directo al final de su script)

Ver. El sistema no puede encontrar el etiqueta de lote especificada y Batch-as-batch-can!

Otros consejos

Tengo el mismo problema antes. Sin embargo, la causa raíz no era CRLF en absoluto. Fue porque en el script ejecuté un programa externo como Ant, pero no puse un CALL antes de Ant. Por lo tanto, asegúrese de que CALL todos los programas externos utilizados en su script por lotes.

Aquí está el problema y cómo solucionarlo. El problema es un error o una característica en el programa por lotes cmd de DOS. Primero la clara declaración del problema. Si tiene un archivo de proceso por lotes de DOS con etiquetas de destino como, ": dothis " ;, y al final de la etiqueta no tiene espacio, entonces el archivo de proceso por lotes no funcionará si el final de la línea es el final de línea de UNIX. Esto significa que tiene que ejecutar unix2dos en el archivo antes de poder usarlo.

La causa raíz es el procesador de línea de comandos de DOS, (programa shell), toma el carácter de fin de línea de UNIX como parte de la etiqueta. Ya que la parte de ir a usar nunca usa esto como etiqueta, nunca se encuentra ya que tal etiqueta realmente no existe. La solución es poner un espacio adicional al final de cada etiqueta de destino, o incluso mejor cada línea. Ahora el final de las líneas de UNIX no viene a jugar, ya que el espacio actúa como separador y todo funciona.

Si el archivo de proceso por lotes tiene finales de línea Unix (separadores de línea), esto puede suceder a veces.

Solo unix2dos , y el problema debe resolverse.

También debe asegurarse de que al llamar a otros scripts use CALL, en lugar de llamarlos en el entorno de la persona que llama.

Encontré un problema similar ahora con un archivo .cmd y Windows 8. La solución fue cambiar todos los finales de línea al estilo CR + LF DOS. El problema fue confuso porque el archivo por lotes funcionó en su mayoría y las líneas de reorganización cambiaron el efecto.

El archivo .cmd parecía:

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

La función C causaría un error " El sistema no puede encontrar la etiqueta del lote especificada " ;. Extrañamente podría desaparecer reorganizando las llamadas. El cambio de los finales de línea de 0x0A a 0x0D0A parece haberlo corregido.

Quizás VonC significaba "el archivo por lotes debe usar terminaciones de línea CRLF".

Tuve este problema después de copiar un comando de inicio de Word y pegarlo en la ventana de comandos. Había una opción con " - " en el frente, y pensé que se ve igual que el DOS '' - '' no fue :) Después de escribir " - " por mí mismo, el problema se resolvió y el lote funcionó ... un problema difícil de encontrar ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top