本帖最后由 CrLf 于 2015-5-3 16:39 编辑
不用 cls 可避免闪屏,有两种思路:
1、用特殊字符退行技巧
2、输出一个长度为屏幕范围的变量,确保每次刷一屏
来个比较平滑的进度条,进度就简单用标题搞定了,这样就不会有累赘的代码,反正知道了原理其实都是一回事- @echo off & setlocal enabledelayedexpansion
-
- set "Status=█▉▊▋▌▍▎▏"
-
- for /f "delims=d" %%a in ('cmd /u /c echo 損') do set CR=%%a
- for /f "delims=h" %%a in ('cmd /u /c echo 栈') do set BS=%%a
- for /f "delims=i" %%a in ('cmd /u /c echo 椉') do set HT=%%a
-
- echo ┌─────────────────────────┐
- echo │ │
- echo └─────────────────────────┘
- set BS*10=%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%
- (
- set /p"=@!CR!%HT%%BS%%BS*10%%BS*10%!CR!│"
-
- title 进度 0.00 %%
-
- for /l %%a in (1 1 25) do (
- for /l %%a in (1 1 8) do (
- ping /n 1 127.0.0.1 >nul
- ping /n 1 127.0.0.1 >nul
-
- set /a "n+=1,num=10000*n/25/8,num1=num/100,num2=num%%100+100"
- set "num= !num1!.!num2:~-2!"
- title 进度 !num:~-6! %%
-
- set /p=!Status:~-%%a,1!%BS%
- )
- set /p=!Status:~0,1!
- )
- )<nul
-
- echo;
- echo;
- echo The End~
-
- pause>nul & exit /b
复制代码 退行的原理已经找不到出处了,有兴趣就参考 batman 的帖子吧
http://www.bathome.net/viewthread.php?tid=11266
获取特殊字符的办法来自 plp626 的世纪发明:
http://www.bathome.net/viewthread.php?tid=12347 |