Perché "Il sistema non riesce a trovare l'etichetta batch specificata" viene generata anche se esiste un'etichetta?

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

  •  04-07-2019
  •  | 
  •  

Domanda

Durante l'esecuzione di un file batch in Windows XP ho trovato un messaggio di errore che si verifica in modo casuale:

  

Il sistema non riesce a trovare l'etichetta batch specificata name_of_label

Naturalmente esisteva un'etichetta. Cosa causa questo errore?

È stato utile?

Soluzione

In realtà, sono necessarie 2 condizioni perché ciò avvenga:

  • il file batch non deve utilizzare le terminazioni di riga CRLF
  • l'etichetta a cui salti deve superare un limite di blocco (al contrario di e: end label che è solo una scorciatoia per la fine della tua sceneggiatura)

See. Il sistema non riesce a trovare etichetta batch specificata e Batch-as-batch-can!

Altri suggerimenti

Ho avuto lo stesso problema prima. Tuttavia, la causa principale non era affatto CRLF. È stato perché nella sceneggiatura ho eseguito un programma esterno come Ant, ma non ho inserito un CALL prima di Ant. Quindi, assicurati di CALL ogni programma esterno utilizzato nello script batch.

Ecco il problema e come risolverlo. Il problema è un bug o una funzionalità nel programma cmd batch DOS. Innanzitutto la chiara dichiarazione del problema. Se hai un file batch DOS con etichette di destinazione come, ": dothis " ;, e alla fine dell'etichetta non hai spazio, il file batch non funzionerà se la fine della linea è la fine della linea UNIX. Ciò significa che devi eseguire unix2dos sul file prima di poterlo utilizzare.

La causa principale è il processore della riga di comando DOS, (programma shell), accetta il carattere di fine riga UNIX come parte dell'etichetta. Dal momento che il go to part non lo usa mai come etichetta, non lo si trova mai poiché tale etichetta non esiste davvero. La soluzione è quella di mettere uno spazio extra alla fine di ogni etichetta di destinazione, o anche meglio ogni riga. Ora la fine delle linee UNIX non viene riprodotta poiché lo spazio funge da separatore e tutto funziona.

Se il file batch ha terminazioni di riga unix (separatori di riga), a volte può succedere.

Solo unix2dos e il problema dovrebbe essere risolto.

Dovresti anche assicurarti che quando chiami altri script usi CALL, invece di chiamarli nell'ambiente del chiamante.

Ho riscontrato un problema simile proprio ora con un file .cmd e Windows 8. La soluzione era quella di cambiare tutte le terminazioni di linea in stile CR + LF DOS. Il problema era confuso perché il file batch funzionava principalmente e riorganizzando le linee ha cambiato l'effetto.

Il file .cmd sembrava:

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 funzione C causerebbe errore "Il sistema non è in grado di trovare l'etichetta batch specificata". Stranamente potrebbe andare via riordinando le chiamate. La modifica delle terminazioni di riga da 0x0A a 0x0D0A sembra averlo corretto.

Forse VonC significava " il file batch deve usare le terminazioni di riga CRLF " ;.

Ho riscontrato questo problema dopo aver copiato un comando di avvio da Word e averlo incollato nella finestra di comando. C'era un'opzione con " - " sul davanti, e ho pensato che fosse uguale al DOS "- -"; non era :) Dopo aver digitato " - " da solo il problema è stato risolto e il batch ha funzionato ... un problema difficile da trovare ....

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top