Sog*_*hew 4 windows cmd batch-file
我已经尝试了几天,似乎可以让这个工作.我找到了一个例子,但它使用了一个无法正常工作的(CryEcho).我只是想添加这个来让用户知道在ping IP地址时正在发生的事情.我确实在这里找到了一些代码,但它让我感到困惑,因为我刚刚开始乱用批处理文件以获得乐趣.
无论如何,我想要的东西使用类似下面的例子,但文字像(Waiting ... [spinner]).谢谢!
@echo off
setlocal
set COUNT=0
set MAXCOUNT=10
set SECONDS=1
:LOOP
title "\"
call :WAIT
title "|"
call :WAIT
title "/"
call :WAIT
title "-"
if /i "%COUNT%" equ "%MAXCOUNT%" goto :EXIT
set /a count+=1
echo %COUNT%
goto :LOOP
:WAIT
ping -n %SECONDS% 127.0.0.1 > nul
ping -n %SECONDS% 127.0.0.1 > nul
goto :EOF
:EXIT
title FIN!
endlocal
Run Code Online (Sandbox Code Playgroud)
我也发现了这段代码:
@echo off
rem Example showing how to use CryEcho to produce a spinning wheel to show activity.
CryEcho Working ...
call :DoSomeWork
call :SpinAlive
call :DoSomeWork
call :SpinAlive
call :DoSomeWork
call :SpinAlive
call :DoSomeWork
call :SpinAlive
call :DoSomeWork
call :SpinAlive
call :DoSomeWork
call :SpinAlive
call :DoSomeWork
call :SpinAlive
call :DoSomeWork
call :SpinAlive
call :DoSomeWork
cryecho \s\nFinished.
goto :eof
:DoSomeWork
ping -n 1 localhost > nul
goto :eof
:SpinAlive
if "%Spinner%" == "2" (cryecho \\\b)
if "%Spinner%" == "3" (cryecho -q "|"\b)
if "%Spinner%" == "4" (cryecho /\b set Spinner=0) else (cryecho -\b set Spinner=1)
set /A Spinner=%Spinner%+1
goto :eof
Run Code Online (Sandbox Code Playgroud)
主要技巧是将光标移回同一行.
这可以用一个carriage return或一个backspace字符来完成.
@echo off
setlocal EnableDelayedExpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
FOR /L %%n in (1,1,10) DO (
call :spinner
ping localhost -n 2 > nul
)
exit /b
:spinner
set /a "spinner=(spinner + 1) %% 4"
set "spinChars=\|/-"
<nul set /p ".=Waiting !spinChars:~%spinner%,1!!CR!"
exit /b
Run Code Online (Sandbox Code Playgroud)
该<CR>字符是从输出创建的copy /z.
输出完成set /p,因为这省略了最后的输出CR/LF.
的!CR!是输出每次以迫使光标移动回到第一列.
但是,随着Win7和Vista删除所有空白,并且还CR从最前面的输出中移除set /p,它被放置在最后.