Quel est l'équivalent par lots Windows de la commande shell Linux echo -n
qui supprime la nouvelle ligne à la fin de la sortie?
L'idée est d'écrire sur la même ligne à l'intérieur d'une boucle.
windows
batch-file
cmd
newline
Gregseth
la source
la source
echo
pourrait prendre-n
maiscmd.exe
ça ne marcherait tout simplement pas ^^echo
pourrais prendre-n
" dans le contexte d'une question concernant Windows est incorrect.Réponses:
En utilisant
set
et le/p
paramètre, vous pouvez faire écho sans nouvelle ligne:La source
la source
<nul set /p =Hello
.set /p
ne peut pas faire écho à un signe égal comme premier caractère ni à des espaces / tabulations.< nul
est une redirection depuis l'NUL
appareil. Il ne contient rien, mais cela suffit pourset /p
arrêter d'attendre la saisie de l'utilisateurUtiliser:
echo | set /p=
ou<NUL set /p=
fonctionnera tous les deux pour supprimer la nouvelle ligne.Cependant, cela peut être très dangereux lors de l'écriture de scripts plus avancés lorsque la vérification du NIVEAU D'ERREUR devient importante car le réglage
set /p=
sans spécifier de nom de variable mettra le NIVEAU D'ERREUR à 1.Une meilleure approche serait d'utiliser simplement un nom de variable factice comme ceci:
echo | set /p dummyName=Hello World
Cela produira exactement ce que vous voulez sans aucun truc sournois en arrière-plan car j'ai dû découvrir à la dure, mais cela ne fonctionne qu'avec la version piped;
<NUL set /p dummyName=Hello
augmentera toujours le NIVEAU D'ERREUR à 1.la source
La méthode SET / P simple a des limitations qui varient légèrement entre les versions de Windows.
Les citations principales peuvent être supprimées
Les espaces blancs de tête peuvent être supprimés
Le début
=
entraîne une erreur de syntaxe.Voir http://www.dostips.com/forum/viewtopic.php?f=3&t=4209 pour plus d'informations.
jeb a publié une solution intelligente qui résout la plupart des problèmes de texte de sortie sans saut de ligne, même avec un espace au début ou = j'ai affiné la méthode afin qu'elle puisse imprimer en toute sécurité absolument n'importe quelle chaîne de lots valide sans la nouvelle ligne, sur n'importe quelle version de Windows à partir de XP. Notez que la
:writeInitialize
méthode contient un littéral de chaîne qui peut ne pas s'afficher correctement sur le site. Une remarque est incluse qui décrit la séquence de caractères.Les méthodes
:write
et:writeVar
sont optimisées de telle sorte que seules les chaînes contenant des caractères principaux gênants sont écrites à l'aide de ma version modifiée de la méthode COPY de jeb. Les chaînes non gênantes sont écrites à l'aide de la méthode SET / P plus simple et plus rapide.la source
ECHO.
, sauf qu'ilECHO.
peut échouer dans des circonstances obscures . Il existe un tas d'autres formes qui peuvent également échouer dans des situations obscures. Le seul qui fonctionne toujours estECHO(
.En complément de la réponse de @ xmechanix, j'ai remarqué en écrivant le contenu dans un fichier:
Cela ajoutera un espace supplémentaire à la fin de la chaîne imprimée , ce qui peut être gênant, d'autant plus que nous essayons d'éviter d'ajouter une nouvelle ligne (un autre caractère d'espacement) à la fin de la chaîne.
Heureusement, en citant la chaîne à imprimer, c'est-à-dire en utilisant:
Imprime la chaîne sans aucun caractère de nouvelle ligne ou d'espace à la fin.
la source
World
et>
...set /p="abc"<nul|xxd -p
affichages616263
alors queset /p=abc<nul|xxd -p
donne61626320
Une solution pour l'espace blanc dépouillé dans SET / P:
l'astuce est ce caractère de retour arrière que vous pouvez invoquer dans l'éditeur de texte EDIT for DOS. Pour le créer dans EDIT, appuyez sur ctrlP + ctrlH . Je le collerais ici mais cette page Web ne peut pas l'afficher. Il est cependant visible sur le bloc-notes (il était plus sec, comme un petit rectangle noir avec un cercle blanc au centre)
Vous écrivez donc ceci:
Le point peut être n'importe quel caractère, il n'est là que pour indiquer à SET / P que le texte commence là, avant les espaces, et non au " Bonjour ". Le " 9 " est une représentation du caractère de retour arrière que je ne peux pas afficher ici. Vous devez le mettre à la place du 9, et il supprimera le " . ", Après quoi vous obtiendrez ceci:
au lieu de:
J'espère que ça aide
la source
Vous pouvez supprimer la nouvelle ligne en utilisant "tr" de gnuwin32 ( package coreutils )
Soit dit en passant, si vous faites beaucoup de scripts, gnuwin32 est une mine d'or.
la source
trim
?\r
,\n
ou\r\n
(nouvelles lignes dans Mac OS X, Posix et Windows respectivement) ne sont pas des caractères « espace ».Voici une autre méthode, il utilise Powershell Write-Host qui a un paramètre -NoNewLine, combinez-le avec
start /b
et il offre les mêmes fonctionnalités de lot.NoNewLines.cmd
Production
Celui-ci ci-dessous est légèrement différent, ne fonctionne pas exactement comme le veut l'OP, mais il est intéressant car chaque résultat écrase le résultat précédent en émulant un compteur.
la source
et aussi pour faire écho en commençant par l'utilisation des espaces
la source
Peut-être que c'est ce que vous cherchez, c'est un script old school ...: P
ou peut-être essayez-vous de remplacer une ligne actuelle au lieu d'écrire sur une nouvelle ligne? vous pouvez tester cela en supprimant le "% bs%" après le "." signe et également en espaçant les autres "% bs%" après le "Exemple de message".
Je trouve cela très intéressant car il utilise une variable dans un autre but que celui pour lequel il est destiné. comme vous pouvez le voir, "% bs%" représente un retour arrière. Le second "% bs%" utilise le retour arrière pour ajouter des espaces après le "Exemple de message" pour séparer la "Sortie de la commande Pause" sans ajouter réellement un caractère visible après le "Exemple de message". Cependant, cela est également possible avec un signe de pourcentage régulier.
la source
set nl=^& echo.
astuce partout et le nom de la variable est trompeur. % nl% n'est pas un caractère de retour à la ligne : il se développe&echo.
donc à la fin vous exécutez une nouvelleecho
commande à chaque fois, d'où le retour à la ligne. Vous pouvez le vérifier par écritecho "%nl%The%nl%new%nl%line%nl%is%nl%not%nl%apparent%nl%throughout%nl%text%nl%"
. Vous obtenez"& echo. The& echo. new& echo. line& echo. is& echo. not& echo. apparent& echo. throughout& echo. text& echo. "
, révélant l'astuce. La sortie est la même mais pas pour les raisons que vous suggérez.cw.exe
Utilitaire de bricolage (écriture sur console)Si vous ne le trouvez pas prêt à l'emploi, prêt à l'emploi, vous pouvez le bricoler. Avec cet
cw
utilitaire, vous pouvez utiliser tous les types de caractères. J'aimerais au moins le penser. Veuillez faire un test de stress et faites le moi savoir.Outils
Il vous suffit d' installer .NET , ce qui est très courant de nos jours.
Matériaux
Certains caractères tapés / copiés-collés.
Pas
.bat
fichier avec le contenu suivant.Exécuter.
Maintenant, vous avez un bel utilitaire 4Ko afin que vous puissiez supprimer le
.bat
.Alternativement, vous pouvez insérer ce code comme sous-programme dans n'importe quel lot, envoyer le résultat
.exe
à%temp%
, l'utiliser dans votre lot et le supprimer lorsque vous avez terminé.Comment utiliser
Si vous voulez écrire quelque chose sans nouvelle ligne:
cw Whatever you want, even with "", but remember to escape ^|, ^^, ^&, etc. unless double-quoted, like in "| ^ &".
Si vous voulez un retour chariot (aller au début de la ligne), exécutez juste
cw
Essayez donc ceci depuis la ligne de commande:
la source
J'ai créé une fonction à partir de l'idée de @arnep:
C'est ici:
Utilisez-le avec
call :SL "Hello There"
je sais que cela n'a rien de spécial mais il m'a fallu si longtemps pour y penser que je pensais que je le posterais ici.
la source
Exemple 1: cela fonctionne et produit du code de sortie = 0. C'est bien. Noter la "." , directement après l'écho.
Ceci est un message affiché comme Linux echo -n l'afficherait ... 0
Exemple 2: cela fonctionne mais produit du code de sortie = 1. C'est mauvais. Veuillez noter l'absence de ".", Après l'écho. Cela semble être la différence.
Ceci est un message affiché comme Linux echo -n l'afficherait ... 1
la source
Inspiré par les réponses à cette question, j'ai créé un script de compteur simple qui continue d'imprimer la valeur de progression (0-100%) sur la même ligne (écrasant la précédente). Peut-être que cela sera également utile à ceux qui recherchent une solution similaire.
Remarque : Les caractères ne
*
sont pas imprimables, ils doivent être entrés en utilisant la combinaison de touches [Alt
+Numpad 0
+Numpad 8
], qui est lebackspace
caractère.la source
Je crois qu'il n'y a pas une telle option. Vous pouvez également essayer ceci
la source
Vous pouvez supprimer la nouvelle ligne à l'aide de la commande set / p. La commande set / p ne reconnaît pas un espace, pour cela vous pouvez utiliser un point et un caractère de retour arrière pour le faire reconnaître. Vous pouvez également utiliser une variable comme mémoire et y stocker ce que vous souhaitez imprimer, afin de pouvoir imprimer la variable à la place de la phrase. Par exemple:
De cette façon, vous pouvez imprimer n'importe quoi sans nouvelle ligne. J'ai fait le programme pour imprimer les caractères un par un, mais vous pouvez aussi utiliser des mots au lieu de caractères en changeant la boucle.
Dans l'exemple ci-dessus, j'ai utilisé "enabledelayedexpansion" afin que la commande set / p ne reconnaisse pas "!" caractère et imprime un point au lieu de cela. J'espère que vous n'avez pas recours au point d'exclamation "!" ;)
la source
Réponse tardive ici, mais pour toute personne qui a besoin d'écrire des caractères spéciaux sur une seule ligne qui trouve la réponse de dbenham trop longue d'environ 80 lignes et dont les scripts peuvent se casser (peut-être en raison de la saisie de l'utilisateur) sous les limites de la simple utilisation
set /p
, il est probablement plus facile de simplement associer votre .bat ou .cmd avec un exécutable compilé en C ++ ou en langage C, puis justecout
ouprintf
les caractères. Cela vous permettra également d'écrire facilement plusieurs fois sur une ligne si vous affichez une sorte de barre de progression ou quelque chose utilisant des caractères, comme OP apparemment.la source
printf
à partir d'uncmd
volet Win-7 me donne"'printf' is not recognized as an internal or external command, operable program or batch file."
printf
n'est pas natif de Windows. Ceci est une question Windows.