Batch di Windows: echo senza nuova riga



Answers

Utilizzo: echo | set /p= echo | set /p= o <NUL set /p= funzioneranno entrambi per sopprimere la nuova riga.

Tuttavia, questo può essere molto pericoloso quando si scrivono script più avanzati quando si controlla che ERRORLEVEL diventi importante poiché l'impostazione set /p= senza specificare un nome di variabile imposterà ERRORLEVEL su 1.

Un approccio migliore sarebbe semplicemente utilizzare un nome di variabile fittizio in questo modo:
echo | set /p dummyName=Hello World

Questo produrrà esattamente ciò che desideri senza che si verifichino problemi di sottofondo in background, dato che dovevo scoprire la via difficile, ma funziona solo con la versione con pipe; <NUL set /p dummyName=Hello aumenterà ancora ERRORLEVEL a 1.

Question

Qual è l'equivalente in batch di Windows del comando di shell di Linux echo -n che sopprime il newline alla fine dell'output?

L'idea è di scrivere sulla stessa riga all'interno di un ciclo.




Esempio 1: funziona e produce codice di uscita = 0. È buono. Notare la "." , direttamente dopo l'eco.

C: \ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ scripts #
@echo. | set / p JUNK_VAR = Questo è un messaggio visualizzato come Linux echo -n lo visualizzerebbe ... & echo% ERRORLEVEL%

Questo è un messaggio visualizzato come Linux echo -n lo mostrerebbe ... 0

Esempio 2: funziona ma produce codice di uscita = 1. Che è cattivo. Si prega di notare la mancanza di ".", Dopo l'eco. Questa sembra essere la differenza.

C: \ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ scripts #
@echo | set / p JUNK_VAR = Questo è un messaggio visualizzato come Linux echo -n lo visualizzerebbe ... & echo% ERRORLEVEL%

Questo è un messaggio visualizzato come Linux echo -n lo mostrerebbe ... 1




Una soluzione per lo spazio bianco spogliato in SET / P:

il trucco è quel carattere backspace che puoi richiamare nell'editor di testo EDIT per DOS. Per crearlo in MODIFICA premi ctrlP + ctrlH . Lo incollerei qui ma questa pagina web non può visualizzarlo. È visibile sul blocco note (è werid, come un piccolo rettangolo nero con un cerchio bianco al centro)

Quindi scrivi questo:

<nul set /p=.9    Hello everyone

Il punto può essere qualsiasi carattere, è solo lì per dire SET / P che il testo inizia lì, prima degli spazi, e non al " Ciao ". Il " 9 " è una rappresentazione del carattere backspace che non posso visualizzare qui. Devi metterlo al posto del 9, e cancellerà il " . ", Dopo di che otterrai questo:

    Hello Everyone

invece di:

Hello Everyone

spero possa essere d'aiuto




Risposta tardiva qui, ma per chiunque abbia bisogno di scrivere caratteri speciali su una singola riga che trova la risposta di dbenham ad essere di circa 80 righe troppo lunghe e le cui sceneggiature potrebbero rompersi (forse a causa di input dell'utente) sotto i limiti del semplice utilizzo di set /p , probabilmente è più facile semplicemente accoppiare il tuo .bat o .cmd con un eseguibile compilato in C ++ o in linguaggio C e quindi solo cout o printf i caratteri. Ciò consentirà anche di scrivere facilmente più volte su una riga se si sta mostrando una sorta di barra di avanzamento o qualcosa usando i caratteri, come era apparentemente OP.




Come addendum alla risposta di @ xmechanix, ho notato attraverso la scrittura del contenuto in un file:

echo | set /p dummyName=Hello World > somefile.txt

Questo aggiungerà uno spazio extra alla fine della stringa stampata , il che può essere sconveniente, specialmente perché stiamo cercando di evitare di aggiungere una nuova riga (un altro carattere di spaziatura) alla fine della stringa.

Fortunatamente, citando la stringa da stampare, cioè utilizzando:

echo | set /p dummyName="Hello World" > somefile.txt

Stamperà la stringa senza alcun carattere di fine riga o spazio alla fine.




Forse questo è quello che stai cercando, è una sceneggiatura vecchia scuola ...: P

set nl=^& echo. 
echo %nl%The%nl%new%nl%line%nl%is%nl%not%nl%apparent%nl%throughout%nl%text%nl%
echo only in prompt.
pause

o forse stai cercando di sostituire una linea corrente invece di scrivere su una nuova riga? puoi sperimentare rimuovendo "% bs%" dopo "." firmare e anche distanziando l'altro "% bs%" dopo il "Messaggio di esempio".

for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "bs=%%a"
<nul set /p=.%bs%         Example message         %bs%
pause

Lo trovo davvero interessante perché usa una variabile per uno scopo diverso da quello che è destinato a fare. come puoi vedere il "% bs%" rappresenta un backspace. Il secondo "% bs%" utilizza il backspace per aggiungere spazi dopo il "Messaggio di esempio" per separare "l'output del comando di pausa" senza aggiungere effettivamente un carattere visibile dopo il "messaggio di esempio". Tuttavia, questo è anche possibile con un segno percentuale regolare.




Links