¿Es seguro escribir archivos por lotes con finales de línea Unix?

15

Creo que me encontré con un error en un archivo por lotes porque estaba escrito con terminaciones de línea unix. ¿Es este un problema conocido con cmd.exe ejecutando archivos por lotes en Windows?

cmcginty
fuente
1
Nunca he tenido un problema, y ​​siempre uso finales de línea unix. Pero eso no significa que no haya algún problema que haya tenido la suerte de perder.
Zoredache
2
¿En qué error te encontraste? ¿Los comandos no se inician? ¿O simplemente parece que no hay finales de línea cuando abre el archivo con el bloc de notas?
Hennes

Respuestas:

11

Esto realmente no es un "error" ... ya que es por diseño. Las nuevas líneas de Windows se definen como "\ r \ n" ... o una combinación de "Retorno de carro" y "Nueva línea" ... mientras que los sabores * nix prefieren omitir el retorno de carro. Siempre debe usar "\ r \ n" en cualquier cosa en Windows donde sea posible. Cualquier otra cosa puede ser interpretada incorrectamente ... y causar una gran cantidad de resultados inesperados.

TheCompWiz
fuente
Encontré un problema donde call: label no saltó a una etiqueta, pero la misma llamada más tarde en el archivo sí saltó a la etiqueta. El archivo en cuestión estaba usando \ n terminaciones de línea. Cambié a \ r \ n terminaciones de línea para todos los archivos por lotes en mi proyecto y el problema desapareció. No volví a probar con \ n terminaciones para confirmar que no se trataba solo de una casualidad (las secuencias de comandos tardan casi una hora en ejecutarse).
Samuel
2
El Bloc de notas no puede manejar las terminaciones de línea de Unix, pero WordPad puede, PowerShell puede, y muchas otras cosas también.
Michael Hampton
¿Puede proporcionar algunos ejemplos más cuando los archivos .bat no funcionan correctamente con terminaciones de línea nix?
Michal Kordas
@MichalKordas Sin revisar y probar cada versión de cada sistema operativo Microsoft y distribución * nix, es una tarea difícil de dar. Este realmente no es el lugar para entrar en una discusión detallada sobre el tema. Las mejores prácticas son tales que Windows usa \ r \ n, * nix usa \ n, y algunas veces mac usa solo a \ r. Como solo Windows usa archivos por lotes, es mejor asumir que debe usar \ r \ n.
TheCompWiz
4

Se parece que los lotes etiquetas se omiten cuando LFse utiliza (de fin de línea Unix) en un .batarchivo.

go2null
fuente
3

Para los archivos por lotes, no parece haber diferencia entre las terminaciones de línea de Unix y las terminaciones de línea de Windows.

goto, callo incluso la creación de variables de salto de línea funciona con ambos estilos.

Y a medida que el analizador por lotes elimina los retornos de carro directamente después de la fase de expansión porcentual, nunca jugarán un papel importante.

jeb
fuente