ss64 script examples ejemplos batch windows batch-file label

windows - script - ¿Por qué "El sistema no puede encontrar la etiqueta de lote especificada" se lanza incluso si existe una etiqueta?



ms dos batch goto (7)

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

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

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

El sistema no puede encontrar la etiqueta del lote especificada name_of_label

Por supuesto, la etiqueta existió. ¿Qué causa este error?



Me encontré con un problema similar ahora con un archivo .cmd y Windows 8. La solución fue cambiar todas las terminaciones de línea al estilo CR + LF DOS. El problema era confuso porque el archivo por lotes funcionaba principalmente y las líneas cambiaban el efecto.

El archivo .cmd se veía así:

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 provocaría el error "El sistema no puede encontrar la etiqueta del lote especificada". Extrañamente, podría desaparecer reorganizando las llamadas. Cambiar las terminaciones de línea de 0x0A a 0x0D0A parece haberlo solucionado.

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


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

Solo lo unix2dos y el problema debería ser resuelto.


También debe asegurarse de que cuando llame a otras secuencias de comandos utilice CALL, en lugar de llamarlas en el entorno de la persona que llama.


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 el aspecto era el mismo que en el DOS "-" no lo era :) Después de escribir el "-" solo el problema se resolvió y el lote funcionó ... un disco duro para encontrar el problema ...


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 una CALL antes de Ant. Por lo tanto, asegúrese de CALL cada programa externo utilizado en su secuencia de comandos por lotes.