标题: 如何用“\-/”表示一个进度状态?
[打印本页]
作者: 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: |
- @echo off
- setlocal enabledelayedexpansion
- set b=/-\ /-\ **
- set 速度=1
- set 退格=
- set n=0
- for %%i in (%SystemRoot%\*.*) do (call :a !n!© %%i>nul 2>nul&set /a n+=1)
- goto :eof
- :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
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!
© %%i>nul 2>nul&set /a n+=1)
看不太清楚!
为何???(%SystemRoot%\*.*)
set/a a=%1%%10
是%1除以10取余?
set/a c=%a%%%4
是%a%除以4取余?
© %%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
看看~~~~~~~~~~~~~~~~~