Przypuszczam używasz DOS/NT partię.
Jest to możliwe za pomocą polecenia set/p, bo set/p nie drukuje crlf
set /p "=Executing backup...." <nul
echo OK
Również jest to możliwe, aby usunąć wiersz znakiem CR. Ważne jest, aby wiedzieć, że białe znaki z przodu zestawu/p są ignorowane (w Vista, nie w XP), więc! Cr! musi umieścić później lub na końcu. CR może być wyświetlany tylko z opóźnionym rozszerzeniem, ponieważ% cr% działa, ale znaki CR są usuwane w fazie ekspansji procentowej (lub bezpośrednio po tej fazie), ale nie w fazie opóźnionego rozszerzania.
Przykład licznika, które wykorzystują tylko jedną linię do wyświetlania
@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
EDIT: Wyjaśnienie, jak zmienna cr
jest tworzony (Sporządzono z trick)
Po ustawieniu zmiennej X
Do pojedyncza kropka (sam znak jest nieważny), powtarza się, aby stać się 8188 znakami poprzez for /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
Następnie va riable, dwie przestrzenie i zarówno CR i LF są echem w pliku z echo !X! > %temp%\cr.tmp
(Zwróć uwagę na dwie przestrzenie między !X!
i >
i końcówki naturalna linia echo zmienia wewnętrznie)
teraz mamy 8192 znaków, ale dane bufor może zawierać tylko 8191 znaków, więc ostatni znak (linia) zostanie usunięty!
W następnej linii echo\>> %temp%\cr.tmp
kolejna CR/LF
zestaw jest dołączany do pliku (the \
w poleceniu jest tylko do wyjściowego niczego bar powrotu karetki i nowego wiersza, jak echo
przez to self wyświetli ECHO is ON/OFF
), że ważne jest, jako pojedynczy CR
nie można odczytać na końcu linii (Więcej później).
Więc plik zawiera teraz <8188 .'s><SPACE><SPACE><CR><CR><LF>
for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do
odczytuje drugi znak, że delimters są standardowe miejsca i zakładka, więc drugi znacznik jest tylko jeden CR
, co ilustruje poniższy CR/LF
jest usuwany jako średnia linia zakończona.
Wreszcie endlocal
służy do powrotu do środowiska bez zmiennych tymczasowych X
, c
i a
istniejące (jak w przypadku endlocal
w nawiasach, umożliwia ustawienie cr
przed endlocal
faktycznie ma wpłynąć na koniec wsporników (można również zapisać jako for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do endlocal&set cr=%%a&goto :eof
)
Dodatkowo
to był mój pierwszy sposób, aby stworzyć postać CR, ale wymaga to trochę czasu i plik tymczasowy.
Później zobaczyłem prostszą metodę pobierania CR z komendy copy /z
.
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
Jakim systemem operacyjnym jesteś? –
tak, Windows Server 2003, zapomniałem ... – aemme