web-dev-qa-db-fra.com

Écho d'une ligne vide (vide) à la console à partir d'un fichier de commandes Windows

Lors de la sortie des messages d'état sur la console à partir d'un fichier de commandes Windows, je souhaite générer lignes vierges pour fractionner la sortie. Comment puis-je faire cela?

116
DavidRR

Remarque: bien que ma réponse initiale ait attiré plusieurs votes positifs, j'ai décidé de pouvoir faire beaucoup mieux. Vous pouvez trouver ma réponse originale (simpliste et erronée) dans l'historique des modifications.

Si Microsoft avait l'intention de fournir un moyen de générer une ligne vierge de cmd.exe, Microsoft aurait sûrement documenté une opération aussi simple. C'est cette omission qui m'a motivé à poser cette question.

Donc, comme un moyen de sortir une ligne vide de cmd.exe est documenté , , on devrait considérer que toute suggestion sur la manière de le faire est un bidouille . Cela signifie qu’il n’existe aucune méthode connue permettant de générer une ligne vierge de cmd.exe qui soit garantie de fonctionner (ou de travailler efficacement) dans tous situations.

Dans cet esprit, voici une discussion sur les méthodes recommandées pour la sortie d'une ligne vide à partir de cmd.exe. Toutes les recommandations sont basées sur des variantes de la commande echo.


echo.

Bien que cela fonctionne dans beaucoup, sinon la plupart des situations, , il convient de l'éviter car il est plus lent que ses alternatives et peuvent réellement échouer (voir ici , ici , et ici ). Plus précisément, cmd.exe recherche d'abord un fichier nommé echo et tente de le démarrer. Si un fichier nommé echo existe dans le répertoire de travail en cours, echo. échouera avec:

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

echo:
echo\

À la fin de cette réponse , l'auteur affirme que ces commandes peuvent être lentes, par exemple si elles sont exécutées à partir d'un emplacement de lecteur réseau. Une raison spécifique de la lenteur potentielle n'est pas donnée. Mais on peut en déduire que cela peut avoir quelque chose à voir avec l'accès au système de fichiers. (Peut-être parce que : et \ ont une signification particulière dans un chemin de système de fichiers Windows?)

Cependant, certains peuvent considérer ces options comme étant sûres, car : et \ ne peuvent pas figurer dans un nom de fichier. Pour cette raison ou pour une autre raison, echo: est recommandé par SS64.com ici .


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

Cette longue discussion inclut ce que je crois être tout cela. Plusieurs de ces options sont recommandées dans this SO answer . Dans la discussion citée, cet article se termine par ce qui semble être une recommandation pour echo( et echo:.

Ma question en haut de cette page ne spécifie pas une version de Windows. Mon expérience sur Windows 10 indique que tous produisent une ligne vide, que des fichiers nommés echo, echo+, echo,, ..., echo] existe dans le répertoire de travail actuel. (Notez que ma question est antérieure à la publication de Windows 10. Je concède donc la possibilité que les anciennes versions de Windows se comportent différemment.)

Dans cette réponse , @ jeb affirme que echo( fonctionne toujours . Pour moi, la réponse de @ jeb implique que d'autres options sont moins fiables, mais ne fournissent pas de détails sur les raisons. Notez que @jeb a apporté un contenu précieux aux autres références citées dans cette réponse.


Conclusion: Ne pas utilisez echo.. Parmi les nombreuses options que j'ai trouvées dans les sources que j'ai citées, le soutien à ces deux semble faire autorité:

echo(
echo:

Mais je n'ai trouvé aucune preuve solide que l'utilisation de l'une ou l'autre de ces solutions se fasse sans problème.


Exemple d'utilisation:

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

Résultat attendu:

Here is the first line.

There is a blank line above this line.
76
DavidRR

Chacune des trois options ci-dessous vous convient:

echo[

echo(

echo. 

Par exemple:

@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.
124
Sunny

Il y a souvent une astuce pour utiliser "écho".

Mais cela est lent et risque d’échouer avec un message d’erreur, car cmd.exe recherchera d’abord un fichier nommé 'echo' (sans extension) et n’affiche qu’une ligne vide lorsque ce fichier n’existe pas.

Vous pouvez utiliser echo(. C'est environ 20 fois plus rapide et ça marche toujours. Le seul inconvénient pourrait être que cela semble étrange.

Vous trouverez plus d'informations sur les différentes variantes de ECHO:/\ _ à astuces DOS: ECHO. FAILS pour donner du texte ou une ligne vide .

40
jeb