Haga eco de una línea en blanco (vacía) a la consola desde un archivo por lotes de Windows [duplicado]

Resuelto DavidRR asked hace 10 años • 3 respuestas

Al enviar mensajes de estado a la consola desde un archivo por lotes de Windows, quiero generar líneas en blanco para dividir la salida. ¿Cómo hago esto?

DavidRR avatar Dec 20 '13 03:12 DavidRR
Aceptado

Cualquiera de las siguientes tres opciones funciona para usted:

echo[

echo(

echo. 

Por ejemplo:

@echo off
echo There will be a blank line below
echo[
echo Above line is blank
echo( 
echo The above line is also blank.
echo. 
echo The above line is also blank.
Sunny avatar Dec 20 '2013 05:12 Sunny

Nota: Aunque mi respuesta original atrajo varios votos positivos, decidí que podía hacerlo mucho mejor. Puede encontrar mi respuesta original (simplista y equivocada) en el historial de edición.

Si Microsoft hubiera tenido la intención de proporcionar un medio para generar una línea en blanco desde cmd.exe, seguramente habría documentado una operación tan simple. Es esta omisión la que me motivó a hacer esta pregunta.

Entonces, debido a que nocmd.exe está documentado un medio para generar una línea en blanco , podría decirse que se debería considerar cualquier sugerencia sobre cómo lograr esto como un truco . Eso significa que no existe ningún método conocido para generar una línea en blanco que garantice que funcione (o que funcione de manera eficiente) en todas las situaciones.cmd.exe

Con eso en mente, aquí se analizan los métodos que se han recomendado para generar una línea en blanco desde cmd.exe. Todas las recomendaciones se basan en variaciones del echocomando.


echo.

Si bien esto funcionará en muchas situaciones, si no en la mayoría, se debe evitar porque es más lento que sus alternativas y, de hecho, puede fallar (consulte aquí , aquí y aquí ). Específicamente, cmd.exeprimero busca un archivo con nombre echoe intenta iniciarlo. Si un archivo nombrado echoexiste en el directorio de trabajo actual, echo.fallará con:

'echo.' is not recognized as an internal or external command,
operable program or batch file.

echo:
echo\

Al final de esta respuesta , el autor sostiene que estos comandos pueden ser lentos, por ejemplo, si se ejecutan desde una ubicación de unidad de red. No se proporciona una razón específica para la posible lentitud. Pero se puede inferir que puede tener algo que ver con el acceso al sistema de archivos. (¿Quizás porque :y \tiene un significado especial en la ruta del sistema de archivos de Windows?)

Sin embargo, algunos pueden considerar que estas son opciones seguras ya que :no \pueden aparecer en el nombre de un archivo. Por esa u otra razón, echo:SS64.com lo recomienda aquí .


echo(
echo+
echo,
echo/
echo;
echo=
echo[
echo]

Esta larga discusión incluye lo que creo que son todos estos. Varias de estas opciones también se recomiendan en esta respuesta SO . Dentro de la discusión citada, esta publicación termina con lo que parece ser una recomendación para echo(y echo:.

Mi pregunta en la parte superior de esta página no especifica una versión de Windows. Mi experimentación en Windows 10 indica que todos estos producen una línea en blanco, independientemente de si existen archivos llamados echo, echo+, echo,, ... echo]en el directorio de trabajo actual. (Tenga en cuenta que mi pregunta es anterior al lanzamiento de Windows 10. Por lo tanto, admito la posibilidad de que las versiones anteriores de Windows se comporten de manera diferente).

En esta respuesta , @jeb afirma que echo( siempre funciona. Para mí, la respuesta de @jeb implica que otras opciones son menos confiables, pero no proporciona ningún detalle de por qué podría ser así. Tenga en cuenta que @jeb contribuyó con contenido muy valioso a otras referencias que he citado en esta respuesta.


Conclusión : no utilizarecho. . De las muchas otras opciones que encontré en las fuentes que he citado, el apoyo a estas dos parece el más autorizado:

echo(
echo:

Pero no he encontrado ninguna evidencia sólida de que el uso de cualquiera de estos siempre esté libre de problemas.


Uso de ejemplo:

@echo off
echo Here is the first line.
echo(
echo There is a blank line above this line.

Rendimiento esperado:

Here is the first line.

There is a blank line above this line.
DavidRR avatar Dec 19 '2013 20:12 DavidRR

A menudo existe el consejo de utilizar "eco".

Pero eso es lento y podría fallar con un mensaje de error, ya que cmd.exe buscará primero un archivo llamado 'echo' (sin extensión) y solo cuando el archivo no existe generará una línea vacía.

Podrías usar echo(. Esto es aproximadamente 20 veces más rápido y siempre funciona. El único inconveniente podría ser que parezca extraño.

Más información sobre las diferentes ECHO:/\variantes se encuentra en los consejos de DOS: ECHO. NO puede proporcionar texto o línea en blanco .

jeb avatar Dec 19 '2013 21:12 jeb