En écho à la même ligne
J'ai eu un coup d'oeil à la questions précédente de votre base de données et je n'essayais pas de réponse, mais j'essaie.
Je voudrais écrire les lignes suivantes de code:
echo Executing backup....
backup procedure
echo Ok
mais le résultat devrait être:
Executing backup... Ok
Que c'est possible?!
Quel système d'exploitation êtes-vous?
oui, windows server 2003, j'ai oublié...
oui, windows server 2003, j'ai oublié...
OriginalL'auteur | 2010-11-04
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous utilisez dos/nt-lot.
Il est possible avec le set /p commande, car set /p n'a pas l'impression d'un CrLf
Aussi qu'il est possible d'effacer la ligne avec un caractère CR.
Il est important de savoir que les espaces à l'avant d'un set /p sont ignorés (en Vista, et pas sous XP), de sorte que le !cr! a placé plus tard ou à la fin.
Un CR ne peut être affichée avec delayedExpansion, car %cr% fonctionne, mais CR caractères sont supprimés dans le pourcentage de phase d'expansion(directement ou après cette phase), mais pas dans le retard de la phase d'expansion.
Exemple d'un compteur qui utilisent une seule ligne pour l'affichage
EDIT: Explication, comment la variable
cr
est créé (avec un truc)Après la définition de la variable
X
à un seul point (le personnage lui-même est sans importance), il est répété à devenir 8188 caractères parfor /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
Alors la variable, deux espaces et deux une CR et LF sont fait l'écho dans un fichier avec
echo !X! > %temp%\cr.tmp
(Remarquez les deux espaces entre les!X!
et la>
la nature et des fins de ligne echo modifie en interne)Nous avons maintenant 8192 caractères, mais les données de la mémoire tampon ne peut contenir de 8 191 caractères, de sorte que le dernier caractère (le saut de ligne) seront perdus!
Dans la ligne suivante
echo\>> %temp%\cr.tmp
, un autreCR/LF
ensemble est ajoutée au fichier (le\
dans la commande est juste à la sortie rien de bar le retour chariot et saut de ligne, commeecho
, de par la volonté de sortieECHO is ON/OFF
), qui est important, comme un seulCR
ne peut pas être lu à la fin d'une ligne (Plus tard).Si le fichier contient maintenant
<8188 .'s><SPACE><SPACE><CR><CR><LF>
La
for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do
lit le deuxième jeton, le delimters sont la norme de l'espace et de l'onglet, de sorte que le deuxième jeton est un seulCR
, comme leCR/LF
est supprimé en tant que norme de fin de ligne.Enfin la
endlocal
est utilisée pour renvoyer à un environnement sans les variables temporairesX
,c
eta
existants (Comme avec laendlocal
entre parenthèses, il permet le réglage decr
avant laendlocal
en fait prend effet à la fin de la parenthèse (peut aussi être écrite commefor /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do endlocal&set cr=%%a&goto :eof
)En outre
C'était ma première façon de créer un caractère CR, mais il a besoin d'un certain temps et un fichier temporaire.
Plus tard, j'ai vu une méthode plus simple de récupérer la CR d'une
copy /z
de commande.<nul est pour la tuyauterie rien à set /p, de sorte qu'il n'attend pas la saisie de l'utilisateur
En mettant <nul à la fin (c'est à dire,
set /p "=Executing backup...." <nul
) semble fonctionner de la même et ne pas avoir (au moins) me jeté hors si je l'ai vu dans cette position, ont donc proposé une modification à ce post.Intéressant(!) contre-exemple. Bien que je puisse suivre plus de ça, pas sûr au sujet d'un certain nombre de choses - 1) une Fois les commandes de traitement post le label CreateCR, comment est-elle de retour au poste de commandement de l'appel à l'étiquette CreateCR, 2) Ce qui est contenu dans le var cr qui provoque le prochain set /p de sortie pour ne pas s'asseoir à côté de la précédente. Je pense que je peut voir que la boucle de réglage de X augmente de façon exponentielle le nombre de .'s dans %temp%\cr.tmp, mais alors je ne vois pas comment l \ ' utiliser comme délimiteur dans la prochaine pour la boucle fonctionne. Peut-être une étape par étape aperçu serait apprécié par les autres?
1) Un
goto :eof
fonctionne comme unreturn
ici 2) j'ai ajouter une explicationOriginalL'auteur jeb
Essayez ceci sur le système Posix (Linux)
Il est beaucoup plus difficile sur Windows. Vous aurez besoin d'utiliser quelque chose comme ceci:
Vérifier ce post: http://www.pcreview.co.uk/forums/showpost.php?s=1a20b16775d915998b30bd76a0ec5d35&p=4432915&postcount=7.
Czapla - je ne crois pas que l' / après chaque série (Windows exemple) est nécessaire, ou du moins il semble fonctionner même sans. Cependant, à essayer de les enlever, quelqu'un a empêché le modifier, donc peut-être que c'est faux stackoverflow.com/questions/13665411/.... Pouvez-vous conseiller sur la nécessité pour l' /'s?
la pipe crée de nouveaux cmd.exe ce cas est mentionné dans d'autres liées thead (voir ma réponse)
OriginalL'auteur Piotr Czapla
C'est un peu un hack, mais ici, c'est un article décrivant comment le faire pour Windows.
De l'article, le résultat final (édité pour votre installation ressemble à ceci:
OriginalL'auteur Gary Rowe
J'ai fait quelque chose de similaire à l'aide d'un script VBScript.
Mettez ce code dans EchoNoNewline.vbs:
À partir de votre fichier de commandes, utilisez le script comme ceci:
OriginalL'auteur aphoria
à Ce n'est une barre oblique avant une pipe dans cmd faire pour supprimer les caractères de fin de ligne d'un écho?
la meilleure suggestion est:
Parce que vous êtes quatre ans de retard et ont exactement la même solution que l'on a accepté la réponse.
êtes-vous sérieux? cette réponse, j'ai envoyé ici est d'un autre thread. La accepté de répondre ici est un très long texte à la place
Qui redirige
set /p
ànul
dans le premier bloc de code. Donc oui, c'est la même solution.ouais, bien sûr, avec une tonne d'autres textes - de toute façon, j'étais surtout intéressé par l'info sur le comportement de la pipe là quand j'avais copier / coller de ce texte
OriginalL'auteur George Birbilis