我想制作如加载指示器就像:安装正在运行... 并且这些点应该逐渐出现,一旦它们为3,它们的数字应重新初始化为一个点,并且所有点都在同一行中。
为此我试图混合两个小脚本的代码:the first继续播放点 并且the seconds使计数器通过在同一行中回显来增加其值。
最后我得到了这个代码,这是我想要实现的最接近的解决方案,但仍然存在一个问题,即当已经有三个点时,下一行的点数较少会覆盖其相似的部分从前一行开始,但前一行的剩余部分将保持不变,看起来总有三个点,所有看起来都只是一个简单的静态回声文本..
这是代码:
@echo off
cls
setlocal EnableDelayedExpansion EnableExtensions
call :CreateCR
:spinner
set mSpinner=%mSpinner%.
if %mSpinner%'==.................................' (
set mSpinner=.
)
:: Wait one second.
ping 127.0.0.1 -n 2 >nul
set /P "=Installation Java en cours%mSpinner%!CR!" <nul
::set /p "=Installation Java en cours" <nul
::echo %mSpinner%
goto spinner
:exit
::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
答案 0 :(得分:0)
您可以将退格字符捕获到这样的变量(courtesy of dbenham):
for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"
然后删除你的点,只需发送一些
<NUL set /P "=%BS%"
...要删除的每个点一个%BS%
。作为替代方案,您可以使用旋转的旋转器而不是生长的点。 See this question and answer。在答案中,插入上面的for /f
行以捕获脚本顶部的%BS%
退格,并在微调器中将所有^H
替换为%BS%
在底部的字符串。
答案 1 :(得分:0)
A more simplistic approach would be the following:
@echo off
:spinner
set mSpinner=%mSpinner%.
if %mSpinner%'==....' (set mSpinner=.)
cls
echo Installation in progress%mSpinner%
ping 127.0.0.1 -n 2 >nul
goto spinner