Полагаю, вы используете dos / nt-batch.
Это возможно с помощью команды set / p, поскольку set / p не печатает CrLf
set /p "=Executing backup...." <nul
echo OK
Также возможно стереть строку с символом CR.
Важно знать, что пробельные символы в начале набора / p игнорируются (в Vista, а не в XP), поэтому! Cr! должен быть размещен позже или в конце.
CR может отображаться только с delayedExpansion, потому что% cr% работает, но символы CR удаляются в фазе процентного расширения (или непосредственно после этой фазы), но не в фазе отложенного расширения.
Пример счетчика, который использует только одну строку для отображения
@echo off
setlocal EnableDelayedExpansion EnableExtensions
call :CreateCR
for /l %%n in (1,1,10000) do (
set /P "=Count %%n!CR!" <nul
)
echo(
goto :eof
:CreateCR
rem setlocal EnableDelayedExpansion EnableExtensions
set "X=."
for /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
echo !X! > %temp%\cr.tmp
echo\>> %temp%\cr.tmp
for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do (
endlocal
set cr=%%a
goto :eof
)
goto :eof
РЕДАКТИРОВАТЬ: Объяснение, как создается переменная cr
(сделано с помощью трюка)
После установки переменной X
в одну точку (сам символ не важен), она повторяется и становится 8188 символами в виде for /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
Затем переменная, два пробела и CR и LF выводятся в файл с echo !X! > %temp%\cr.tmp
(обратите внимание на два пробела между !X!
и >
, и естественные окончания строк эхогенно изменяются внутри)
Теперь у нас есть 8192 символа, но буфер данных может содержать только 8191 символ, поэтому последний символ (перевод строки) будет удален!
В следующей строке echo\>> %temp%\cr.tmp
другой файл CR/LF
добавляется к файлу (\
в команде просто ничего не выводит, кроме возврата каретки и перевода строки, как echo
по собственной воле вывод ECHO is ON/OFF
), это важно, так как одиночный CR
не может быть прочитан в конце строки (Подробнее позже).
Итак, файл теперь содержит <8188 .'s><SPACE><SPACE><CR><CR><LF>
for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do
читает второй токен, разделителями являются стандартный пробел и табуляция, поэтому второй токен представляет собой только один CR
, так как следующий CR/LF
удаляется как конец стандартной строки.
Наконец, endlocal
используется для возврата в среду без существующих временных переменных X
, c
и a
(как и в скобках endlocal
, он позволяет установить cr
перед endlocal
фактически вступает в силу в конце скобок (также может быть записано как for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do endlocal&set cr=%%a&goto :eof
)
Дополнительно
Это был мой первый способ создания символа CR, но для этого нужно время и временный файл.
Позже я увидел более простой метод получения CR из команды copy /z
.
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"