Board logo

标题: 如何用“\-/”表示一个进度状态? [打印本页]

作者: kawakumo     时间: 2006-10-30 15:40    标题: 如何用“\-/”表示一个进度状态?

批处理中想用“\-/”表示一个进度状态,好像“-”在翻滚那样,要怎样实现?
作者: 不得不爱     时间: 2006-10-30 20:43
你的意思是一般执行DOS命令一边显示进度吗?
作者: youxi01     时间: 2006-10-30 21:55
@echo off
set str=\-/-
setlocal enabledelayedexpansion
:test
for /l %%i in (-1 1 3) do (
     set /p=!str:~%%i,1!<nul
     ping /n 2 127.1>nul)
cls
goto :test
pause>nul

看看这段代码能否完成任务?如果ping /n 2 127.1实现的延时过长(2秒左右)请采用其它办法。
作者: redtek     时间: 2006-10-30 22:06
很象早期的压缩软件的处理过程,精彩~:)
给youxi01加分~:)
作者: 不得不爱     时间: 2006-10-30 22:26
我也来个:
@echo off
setlocal enabledelayedexpansion
set b=\-/-
:b
for /l %%i in (0,1,32) do call :a %%i
cls
goto :b
:a
set/a a=%1%%4
set/p=!b:~%a%,1!<nul
ping/n 2 127.1>nul
goto :eof
第二个:
@echo off
setlocal enabledelayedexpansion
set b=\-/-
:b
for /l %%i in (0,1,3) do (
echo !b:~%%i,1!
ping /n 2 127.1>nul
cls)
goto b
[ Last edited by qwe1234567 on 2006-10-30 at 10:34 PM ]
作者: redtek     时间: 2006-10-30 22:39


  Quote:
Originally posted by 9527 at 2006-10-30 22:23:
我觉得楼主并不是这个意思,/\-这三个符号你们没有看出来组合出来是个星号吗?估计他要的效果是有转动的效果,如果是转动的效果P处理是无法实玠...

原来楼主想要好玩的动画啊~:)
转动的效果照样可以实现,俺认为没有做不到的事情:)
不仅仅是转动,就是做字处理插字、改都能~:)(要用到ASCII码特殊控置字符:)

在版主qwe1234567兄的代码的基础上加了一个退格功能:)



========== 注意: 请不要直接 COPY  CON  文件名.bat 的方式COPY,
========== 因下面代码特殊控置字符,直接copy是拷贝不上的。
========== 简单办法:COPY到Windows的记事本,然后另存为批处理文件,再执行。
@echo off
rem qwe1234567 字符动画

setlocal enabledelayedexpansion
set b=\-/-
set 速度=2

rem ASCII码的08就是退格特殊控制符
set 退格=


:b
for /l %%i in (0,1,200) do call :a %%i
goto :b
:a
set/a a=%1%%4
set/p=!b:~%a%,1!<nul
ping/n %速度% 127.1>nul
set/p=%退格%<nul
goto :eof
“如果是转动的效果P处理是无法实现的”,实现了吧,嘻嘻……

[ Last edited by redtek on 2006-10-30 at 10:58 PM ]
作者: redtek     时间: 2006-10-30 22:48
你一定没试,它绝对是在(在原地)转动的效果!

楼主:“批处理中想用“\-/”表示一个进度状态,好像“-”在翻滚那样”,
绝是对这样的效果:)


每显示一个字符后,就后退一个格,然后再显示,
(很多命令行软件的提示都是这样的原理!)
这样,因为速度和人的视觉差原因,会产生一个动画的(类似转动起来的效果),
和早期压缩软件的处理效果动画一样。

[ Last edited by redtek on 2006-10-30 at 10:51 PM ]
作者: redtek     时间: 2006-10-30 22:54
等等,我代码COPY错了,我这里好几个,弄混了,
不过原地转动效果真的可以,等一下。
作者: redtek     时间: 2006-10-30 22:56
等等,……我又看了,不是我COPY错了!
你一定是直接在CMD SHELL上使用COPY  CON  文件名.bat
来COPY上面代码的,!

所以,那里面的“退格”=我后面放的是退格的特殊控置字符,
所以,你COPY的时候可就是真的产生退格键了,而这里的退格符号你是COPY不上去的。


(你直接COPY到记事本里,然后再存就没事了!)
(原来是copy con 文件名.bat 直接COPY上面内容时,系统怎么翻译那个退格符为真的退了两个格,致使变量赋值的语句不完整了)

向9527道歉,原来就是这个原因,哈哈……

[ Last edited by redtek on 2006-10-30 at 11:08 PM ]
作者: redtek     时间: 2006-10-30 23:00
直接下载,原地转动的批处理动画代码。
附件 1: q.rar (2006-10-30 23:00, 295 bytes, 下载附件所需积分 1点 ,下载次数: 310)

作者: youxi01     时间: 2006-10-31 00:37
兄弟愚劣,能否告知:
rem ASCII码的08就是退格特殊控制符
set 退格=
中的退格是怎么得到的?
作者: redtek     时间: 2006-10-31 01:15
) 第一种方法:

  使用 MS-DOS自带的(WINDOWS CMD SHELL也有)  ECIT.COM 编辑器得输入特殊控置符。

  进入 EDIT.COM ,按 CTRL+P组合键,然后可以输入特殊字符:
  如:退格键(让光标左移)控制符的ASCII码为 08,
    则可以   ALT+08 (按住ALT键不入,然后按右侧小键盘上的0和8键,都输完了再松开ALT键。
  注:CTRL+P只一次有效,如果再输入第二个控置字符,还得再按一次CTRL+P


) 第二种方法:用Debug得到
-D

0AF5:0100  20 20 20 20 20 0D 0A 20-20 20 20 0D 0A BA 8C 8A   .    ..    .....
0AF5:0110  73 03 E9 4E FF 2B C8 74-D0 F6 06 15 34 00 E4 0A   s..N.+.t....4...
0AF5:0120  F6 06 15 99 20 75 0A 80-3E D2 99 00 75 BB 49 74   .... u..>...u.It
0AF5:0130  B8 BA 0D 8C EB 23 33 D2-87 D1 B8 01 42 CD 21 A3   .....#3.....B.!.
0AF5:0140  DF 99 89 16 E1 99 80 3E-C5 96 00 74 9C B4 40 CD   .......>...t..@.
0AF5:0150  21 72 5F C6 06 E3 99 1A-C3 E8 FF 0F FE 06 D2 96   !r_.............
0AF5:0160  80 3E D1 96 00 74 48 8B-1E 13 99 83 FB 00 7E 33   .>...tH.......~3
0AF5:0170  8B 0E E1 99 8B 16 DF 99-8B C1 0B C2 74 21 B8 00   ............t!..
-E 100

0AF5:0100  20.08

-W

Writing 0000D bytes
-Q
) 象退格这种特殊控置字符,直接在命令行上输入 ALT+08的话,它当时就“执行”了,直接就相当于你按了退格,把左边的内容删掉了。

  所以,在edit.com或其它方式间接输入比较方便。

) 如果是 07 (响铃),在命令行上输入 GTRL+G、ALT+07都可以。

) 其它控置字符详见ASCII码表
  详见如下贴子有更详细的内容……

  DOS学习入门 & 精彩文章 (教学室) » ASCII码表及含义
      http://www.cn-dos.net/forum/viewthread.php?tid=1641&fpage=1&highlight=ascii%E7%A0%81


  

[ Last edited by redtek on 2006-10-31 at 01:30 AM ]
作者: youxi01     时间: 2006-10-31 01:24
非常感谢!
作者: 3742668     时间: 2006-10-31 01:33
3,用VBS:
createobject("scripting.filesystemobject").opentextfile("tmp.txt",2,true).write chr(8)
关于本主题的问题,其实在本版很早转载的一篇贴子(<深入挖掘Windows脚本技术>)里有提到过,现在看来领悟的朋友似乎比较少。
作者: redtek     时间: 2006-10-31 01:49
ASCII码与码表以及相关内容详见如下贴子~:)



ASCII码表及含义
http://www.cn-dos.net/forum/view ... ight=ascii%E7%A0%81


ASCII编码表
http://www.cn-dos.net/forum/view ... amp;highlight=ASCII


dos界面中看ASCII码星球大战
http://www.cn-dos.net/forum/view ... amp;highlight=ASCII

[原创]无奈何签名代码略析
http://www.cn-dos.net/forum/view ... 0%E5%A5%88%E4%BD%95



有关ASCII码以及关于ANSI动画、绘图、定义键盘的更高级的贴子有:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

ANSI.SYS程序的使用
http://www.cn-dos.net/forum/view ... &highlight=ANSI


脱离CONFIG里ANSI驱动实现屏幕彩色显示效果
http://www.cn-dos.net/forum/view ... &highlight=ANSI


RAR支持ANSI转义字符
http://www.cn-dos.net/forum/view ... &highlight=ANSI

(如上:RAR支持ANSI转义字符)
(   可以使自己的网站的RAR压缩包的个性化版权以及压缩包内容声明等)
(   可以间接利用RAR的这个自带特性简单学习ANSI-在无纯DOS的环境下)
(   可以间接画自己喜欢的图像等)

(   关于ANSI做图的内容,在gOOGLE.com上可以检索到很多工具)
(   同时,还可以检索到BMP图像文件转ANSI字符图工具等……)

[ Last edited by redtek on 2006-10-31 at 05:29 AM ]
作者: kawakumo     时间: 2006-10-31 01:52
redtek做的就是我想说的效果,感谢。
作者: redtek     时间: 2006-10-31 02:02
别感谢我,好玩的动画缺了每一个参与的人都实现不了:)

是kawakumo启发了一个好玩的标题和做个动画的想法;
youxi01的代码和qwe1234567版主代码和一个退格应用;
9527发现了退格符在COPY CON时的问题,
还有3742668版主VBS超级技巧,
我们每一个人的参与和交流,论坛内容会越来越丰富:)

[ Last edited by redtek on 2006-10-31 at 02:09 AM ]
作者: redtek     时间: 2006-10-31 02:06


  Quote:
Originally posted by 9527 at 2006-10-31 01:58:
还是那句话---都是我的错,不应该这么早就下结论............

你要不COPY CON ...
就根本发现不了那个退格符原来COPY con的时候就被实时转换了:)
因为每个人的参与,永远都会起到推动和发现更新知识的作用~:)
作者: kawakumo     时间: 2006-10-31 02:10
测试几次后,这是比较好看的效果

@echo off
setlocal enabledelayedexpansion
set b=/--\--
set 速度=0.8
set 退格=
:b
for /l %%i in (0,1,200) do call :a %%i
goto :b
:a
set/a a=%1%%4
set/p=!b:~%a%,1!<nul
ping/n %速度% 127.1>nul
set/p=%退格%<nul
goto :eof
作者: kawakumo     时间: 2006-10-31 04:21
不知道如何把youxi01的效果和redtek的效果在同一行实现?

[ Last edited by kawakumo on 2006-10-31 at 04:22 AM ]
作者: redtek     时间: 2006-10-31 05:28


  Quote:
Originally posted by kawakumo at 2006-10-31 04:21:
不知道如何把youxi01的效果和redtek的效果在同一行实现?

[ Last edited by kawakumo on 2006-10-31 at 04:22 AM ]

适当的禁止退格的应用,显示出来的字符就会“向前走”了~:)

下面的是一个非常精彩的贴子!可不能让它沉下去啊~:)
里面讲了非常详细的原理和过瘾的内容~:)



  [原创]无奈何签名代码略析
  http://www.cn-dos.net/forum/view ... 0%E5%A5%88%E4%BD%95
作者: youxi01     时间: 2006-10-31 05:50
这个可能是你要的代码:
@echo off
rem qwe1234567 字符动画

setlocal enabledelayedexpansion
set b=\^|/-
set 速度=2

rem ASCII码的08就是退格特殊控制符
set 退格=

:b
for /l %%i in (0,1,3) do call :a %%i
cls
goto :b
:a
set /a num=%1+1
set/p test=!b:~%1,1!!b:~0,%num%!<nul
ping/n %速度% 127.1>nul
set/p=%退格%<nul
goto :eof
作者: kawakumo     时间: 2006-10-31 14:03
不对,我想说的效果如下:
[用*代表翻滚的\-/]
.*
..*
...*
....*
.....*
......*
.......*
每次加一个点是youxi01的效果,翻滚的*是redtek的效果,在同一行实现。
作者: chenall     时间: 2006-11-1 00:27
我也来贴一个.不知这个是否达到楼上的要求.
@echo off
setlocal enabledelayedexpansion
set b=/-\ /-\ **
set 速度=1
set 退格=
:b
for /l %%i in (0,1,200) do call :a %%i
goto :b
:a
set/a a=%1%%10
set/a c=%a%%%4
if %a% EQU 0 set/p=.<nul
if %c% EQU 3 (set/p=^|<nul) else (set/p=!b:~%a%,1!<nul)
ping/n %速度% 127.1>nul
set/p=%退格%<nul
goto :eof

作者: redtek     时间: 2006-11-1 00:34
哈哈……做得真好玩~:)
作者: newaifi     时间: 2006-11-1 02:29
受益匪浅。
此方法虽然能制造成“动画效果”。。但缺点也显而易见。
那就是速度的控制不能更精准的掌握。
作者: lxmxn     时间: 2006-11-1 09:19

  要精确的控制速度,即实现延时,可以利用第三方的命令行工具。

  这里推荐一个小工具,叫sleepx,它可以精确到ms,即精确到毫秒。
附件 1: SleepX.rar (2006-11-1 09:19, 18.89 K, 下载附件所需积分 1点 ,下载次数: 60)

作者: kawakumo     时间: 2006-11-1 13:54
不错,就是chenall做的这个效果,真厉害。
作者: kawakumo     时间: 2006-11-1 13:58
如果把这个效果用于表示进度,怎样控制?比如显示复制文件的进度。
作者: kawakumo     时间: 2006-11-1 14:03
set b=/-\ /-\ **改成set b=./-\ /-\ **
加一个点后,换行时的效果更好。
作者: done     时间: 2006-11-2 01:33    标题: 稍稍修改了一下

把.换成了▌
@echo off
setlocal enabledelayedexpansion
set b=/-\ /-\ **
set 速度=1
set 退格=
:b
for /l %%i in (0,1,200) do call :a %%i
goto :b
:a
set/a a=%1%%10
set/a c=%a%%%4
if %a% EQU 0 set/p=▌<nul
if %c% EQU 3 (set/p=^|<nul) else (set/p=!b:~%a%,1!<nul)
ping/n %速度% 127.1>nul
set/p=%退格%<nul
goto :eof

作者: yangzhiyi     时间: 2006-11-2 02:05


  Quote:
Originally posted by kawakumo at 2006-11-1 13:58:
如果把这个效果用于表示进度,怎样控制?比如显示复制文件的进度。

这个才是问题
我只想知道,比如复制文件就显示进度,不用进度对应,只要显示就行,复制完后进度就不显示。
作者: chenall     时间: 2006-11-3 20:41
效果不是很好,运行这个会将c:\windows\*.*复制到当前目录并显示进度.

  Quote:

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set b=/-\ /-\ **
  4. set 速度=1
  5. set 退格=
  6. set n=0

  7. for %%i in (%SystemRoot%\*.*) do (call :a !n!&copy %%i>nul 2>nul&set /a n+=1)
  8. goto :eof

  9. :a
  10. set/a a=%1%%10
  11. set/a c=%a%%%4
  12. if %a% EQU 0 set/p=▌<nul
  13. if %c% EQU 3 (set/p=^|<nul) else (set/p=!b:~%a%,1!<nul)
  14. ping/n %速度% 127.1>nul
  15. set/p=%退格%<nul
  16. goto :eof
        chenall 发表于:  2006-11-03  08:37

[ Last edited by chenall on 2006-11-3 at 08:46 PM ]
作者: kawakumo     时间: 2006-11-4 08:33
真不错,厉害啊
作者: skyearth     时间: 2006-11-10 00:41
偶也来改进一下,显示有竖线的进度循环,呵呵!

@echo off
setlocal enabledelayedexpansion
set b=^|/-\
set 速度=1
set 退格=
:b
for /l %%i in (0,1,200) do call :a %%i
goto :b
:a
set/a a=%1%%4
set/p=!b:~%a%,1!<nul
ping/n %速度% 127.1>nul
set/p=%退格%<nul
goto :eof
作者: terse     时间: 2006-11-19 07:43


  Quote:
Originally posted by skyearth at 2006-11-10 00:41:
偶也来改进一下,显示有竖线的进度循环,呵呵!

@echo off
setlocal enabledelayedexpansion
set b=^|/-\
set 速度=1
set 退格=
:b
for /l %%i in (0,1,200) do call :a %% ...

是否可以自己定位进度循环在屏幕中的位置.
作者: hxuan999     时间: 2006-11-23 06:43
学习
作者: donpps     时间: 2006-12-14 00:41    标题: 如果进度条能够与被调用的子程序同步就好了。

33楼的演示了文件复制的情形,以复制文件的个数为步进量,如果只复制一个比较大的(>=500m)文件呢,怎么办!
如果进度条能够与被调用的子程序同步就好了。
作者: a11yesno     时间: 2007-3-2 16:30
nb 不太喜欢用ping控制延迟 用

for /l %%i in (1,1,1000) do echo %%i>nul 吧

[ Last edited by a11yesno on 2007-3-2 at 04:36 AM ]
作者: xycoordinate     时间: 2007-3-3 04:35
chenall:
for %%i in (%SystemRoot%\*.*) do (call :a !n!&copy %%i>nul 2>nul&set /a n+=1)

看不太清楚!
为何???(%SystemRoot%\*.*)

set/a a=%1%%10
是%1除以10取余?

set/a c=%a%%%4
是%a%除以4取余?

&copy %%i>nul
害人呀????!!!

幸好,你没有
&del %%i>nul
那可就惨了!

[ Last edited by xycoordinate on 2007-3-2 at 03:49 PM ]
作者: zhoushijay     时间: 2007-3-3 07:11
真的转起来了,-_-! 真强悍!
作者: yjhyxing     时间: 2007-3-12 06:52
看贴回贴养成好习惯
作者: windeshadow     时间: 2007-4-17 02:21
娃哈哈
作者: GOTOmsdos     时间: 2007-4-17 03:08
恩,获取ASCII控制符的玩法很不错,挺过瘾..
不过,如果只想获取0x08字符, 用个16进制编辑器,输入08就行了吧?
作者: xuewenzi     时间: 2007-4-17 04:35
闹大了哦 !六楼的大哥效果不错,就是看着不舒服
作者: crenel     时间: 2007-4-17 05:12
写了一个...
昏倒....发了之后才发现是旧帖子....汗死...
@echo off
set str=^-^|^/^-^|^/
set f=1
set /a i=1
cls
setlocal enabledelayedexpansion
:test
     ping /n 1 127.1>nul
     if "%f%" == "1" (
       set/p=!str:~%i%,1!<nul
       set f=0
       if "%i%" == "6" (set/a i=0) else (set/a i+=1)
       goto :test
      )
     :: echo %f% &pause
     set/p=<nul
     set f=1
     goto :test
pause>nul
[ Last edited by crenel on 2007-4-16 at 04:15 PM ]
作者: menglongfc     时间: 2007-4-22 00:40
很有意思,收下了
作者: lililulula     时间: 2007-5-9 14:27

@echo off
rem qwe1234567 字符动画

setlocal enabledelayedexpansion
set b=\^|/-\^|/-
set 速度=1

rem ASCII码的08就是退格特殊控制符
set 退格=


:b
for /l %%i in (0,1,200) do call :a %%i
goto :b
:a
set/a a=%1%%4
set/p=!b:~%a%,1!<nul
ping/n %速度% 127.1>nul
set/p=%退格%<nul
goto :eof
美化下redtek转动动画的效果:) 挖坟墓会不会被-   -?
作者: haiou327     时间: 2007-5-12 17:22
强啊!!!!!!!!!!!!!!!!!!!
作者: haiou327     时间: 2007-5-12 18:04
你想要的是这种效果吧.

@echo off
:: 模拟进度,有剩余时间、已完成进度、进度条的显示
:: code by bg 2007-05-12 CMD@XP
color 2f
title.
mode con lines=10
rem   进度条 ▉▉▉▉▉
set work=0
set n=0
set mo=0
set number=0
rem  all是总数
set all=60
set time=%all%
:show

:check
if %number% GTR %mo% set num=%num%▉&set /a mo=%mo%+1&goto check

:2
作者: lowellsky     时间: 2007-5-28 01:04
LS的高手好多啊
作者: luowei14     时间: 2007-5-28 18:30
ding.,........shuo bu chu shen me l
作者: 379184514     时间: 2008-10-8 05:04
强人
作者: auyach     时间: 2009-5-1 23:34
谢谢分享,学习啊
作者: sunxh     时间: 2009-9-12 13:00
精彩!
作者: h5599859     时间: 2009-9-14 15:24
@echo off
:kk
set /p=^\<nul
ping -n 1 127.0.0.1>nul
cls
set /p=^|<nul
ping -n 1 127.0.0.1>nul
cls
set /p=^/<nul
ping -n 1 127.0.0.1>nul
cls
goto kk
作者: holts     时间: 2009-9-17 21:33
不错
作者: zhangjeff     时间: 2010-1-25 15:21
看看~~~~~~~~~~~~~~~~~