Пакет Windows: эхо без новой строки - PullRequest
200 голосов
/ 18 августа 2011

Что такое пакетный эквивалент Windows для команды оболочки Linux echo -n, которая подавляет символ новой строки в конце вывода?

Идея состоит в том, чтобы писать в одной строке внутри цикла.

Ответы [ 15 ]

2 голосов
/ 25 января 2016

Может быть, это то, что вы ищете, это сценарий старой школы ...: 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

или, может быть, вы пытаетесь заменить текущую строку вместо записи в новую? Вы можете поэкспериментировать с этим, удалив «% bs%» после «.» подписать, а также сделать интервал между другими "% bs%" после "Пример сообщения".

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

Я нахожу это действительно интересным, потому что он использует переменную не для той цели, для которой он предназначен. как вы можете видеть, "% bs%" представляет собой забой. Второй «% bs%» использует пробел для добавления пробелов после «Пример сообщения» для разделения «Вывод команды Пауза» без фактического добавления видимого символа после «Пример сообщения». Тем не менее, это также возможно с обычным знаком процента.

1 голос
/ 04 апреля 2018

Пример 1: Это работает и создает код выхода = 0. Это хорошо.Обратите внимание ".", сразу после эха.

C: \ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ scripts #
@echo. |set / p JUNK_VAR = Это сообщение отображается как Linux echo -n будет отображать его ... & echo% ERRORLEVEL%

Это сообщение отображается так же, как Linux echo -n отобразит его. 0

Пример 2: Это работает , но создает код выхода = 1. Это плохо.Обратите внимание на отсутствие "." После эха.Похоже, что это разница.

C: \ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ scripts #
@echo |set / p JUNK_VAR = Это сообщение отображается как Linux echo -n будет отображать его ... & echo% ERRORLEVEL%

Это сообщение отображается как Linux echo -n будет отображать его ... 1

0 голосов
/ 08 июня 2016

Вы можете подавить новую строку, используя команду set / p. Команда set / p не распознает пробел, для этого вы можете использовать точку и символ возврата на одну позицию, чтобы она распознала его. Вы также можете использовать переменную в качестве памяти и сохранить в ней то, что вы хотите напечатать, чтобы вы могли напечатать переменную вместо предложения. Например:

@echo off
setlocal enabledelayedexpansion
for /f %%a in ('"prompt $H & for %%b in (1) do rem"') do (set "bs=%%a")
cls
set "var=Hello World! :)"
set "x=0"

:loop
set "display=!var:~%x%,1!"
<nul set /p "print=.%bs%%display%"
ping -n 1 localhost >nul
set /a "x=%x% + 1"
if "!var:~%x%,1!" == "" goto end
goto loop

:end
echo.
pause
exit

Таким образом, вы можете напечатать что угодно без новой строки. Я сделал программу для печати символов по одному, но вы также можете использовать слова вместо символов, изменив цикл.

В приведенном выше примере я использовал «enabledelayedexpansion», поэтому команда set / p не распознает «!» символ и печатает точку вместо этого. Я надеюсь, что вы не используете восклицательный знак "!" ;)

0 голосов
/ 11 мая 2015

Поздний ответ здесь, но для тех, кому нужно написать специальные символы в одной строке, для которых ответ dbenham слишком длинный, и чьи сценарии могут сломаться (возможно, из-за вход) в условиях простого использования set /p, вероятно, проще всего просто соединить ваш .bat или .cmd с скомпилированным исполняемым файлом на языке C ++ или C, а затем просто cout или printf символов. Это также позволит вам легко записывать несколько раз в одну строку, если вы показываете какой-то индикатор выполнения или что-то с использованием символов, как, очевидно, было в OP.

0 голосов
/ 18 августа 2011

Я считаю, что такой возможности нет. В качестве альтернативы вы можете попробовать это

set text=Hello
set text=%text% world
echo %text%
...