中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] [4] »
作者:
标题: 用批处理模拟搞笑开机画面 上一主题 | 下一主题
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『楼 主』:  用批处理模拟搞笑开机画面

这个是我从网上看到很多人用这个作为自己的签名图片,我想大家也许也看到过,我想想,编写成批处理也不是不可能,不过最后一步没有实现,有兴趣的还请大家一起来研究,下面是代码和文件........


@echo off
cls
echo Microsoft Windows 2000 [Version 5.00.2195]
echo (C) 版权所有 1985-2000 Microsoft Corp.
echo;
set/p=%cd%^><nul&ping -n 2 127.1>nul&set/p="开"<nul&ping -n 2 127.1>nul&set/p="机"<nul&ping -n 2 127.1>nul&echo;

echo '开机' 不是内部或外部命令,也不是可运行的程序
echo 或批处理文件。
echo.
set/p=%cd%^><nul&ping -n 2 127.1>nul&set/p="快"<nul&ping -n 2 127.1>nul&set/p="开"<nul&ping -n 2 127.1>nul&set/p="机"<nul&ping -n 2 127.1>nul&echo;

echo '快开机' 不是内部或外部命令,也不是可运行的程序
echo 或批处理文件
echo:
set/p=%cd%^><nul&ping -n 2 127.1>nul&set/p="他"<nul&ping -n 2 127.1>nul&set/p="妈"<nul&ping -n 2 127.1>nul&set/p="的"<nul&ping -n 2 127.1>nul&set/p="开"<nul&ping -n 2 127.1>nul&set/p="机"<nul&ping -n 2 127.1>nul&echo;                              
echo '他妈的开机' 不是内部或外部命令,也不是可运行的程序
echo 或批处理文件
echo;

set/p=%cd%^><nul&ping -n 2 127.1>nul&set/p="你"<nul&ping -n 2 127.1>nul&set/p="他"<nul&ping -n 2 127.1>nul&set/p="妈"<nul&ping -n 2 127.1>nul&set/p="的"<nul&ping -n 2 127.1>nul&set/p="快"<nul&ping -n 2 127.1>nul&set/p="开"<nul&ping -n 2 127.1>nul&set/p="机"<nul&ping -n 2 127.1>nul&echo.

echo '你他妈的快开机' 不是内部或外部命令,也不是可运行的程序
echo 或批处理文件
echo;

set/p=%cd%^><nul&ping -n 2 127.1>nul&set/p="操"<nul&ping -n 2 127.1>nul&set/p="!"<nul&ping -n 1 127.1>nul&set/p="!"<nul&ping -n 2 127.1>nul&set/p="不"<nul&ping -n 2 127.1>nul&set/p="开"<nul&ping -n 2 127.1>nul&set/p="机"<nul&ping -n 2 127.1>nul&set/p="我"<nul&ping -n 2 127.1>nul&set/p="就"<nul&ping -n 2 127.1>nul&set/p="砸"<nul&ping -n 2 127.1>nul&set/p="了"<nul&ping -n 2 127.1>nul&set/p="你"<nul&ping -n 2 127.1>nul&set/p="!"<nul&ping -n 4 127.1>nul&echo.
echo.
echo.
echo                        Loading Windows 2000...

echo ================================================================================

不过觉得自己写的有些过于烦琐,望高手提供最佳方法来实现........

[ Last edited by namejm on 2007-2-3 at 06:35 PM ]

附件 1: hellokiki.rar (2006-5-15 17:27, 465 bytes, 下载附件所需积分 1 点 ,下载次数: 272)
2006-5-15 17:27
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 2 楼』:  

最后的进度条可以尝试用cls+type+echo来解决。
    先把屏幕上的输出保存到文件中,然后用一个循环来type那个文件的内容,并echo出进度条出来,在循环的开始部分用cls来清屏。
    或者在最后一步调用一个vbs脚本,利用Wscript.StdOut的Write方法完成一个进度条是很容易的。
建议参考一下 无奈何 兄的签名。

2006-5-15 19:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
doscc
中级用户




积分 256
发帖 93
注册 2006-3-26
来自 广东
状态 离线
『第 3 楼』:  

看过那样的签名!.
是可以用 批处理来做一个.

2006-5-16 08:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 4 楼』:  

3742668兄,你好,对于使用无奈何兄的签名代码的方法我也实验过了,在开始我本来就想用无奈何兄的签名代码的方式来编写,不过无奈何兄的代码在写入%cd%时候效果不是很好也没有找到合适的方法解决所以就只能这样写了,对于进度还3742668
兄指点一二!

2006-5-16 08:48
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 5 楼』:  

doscc既然你说的这么轻松,写出来一个共享一下

2006-5-16 09:31
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
doscc
中级用户




积分 256
发帖 93
注册 2006-3-26
来自 广东
状态 离线
『第 6 楼』:  

我子细看了 破烂兄的代码.
前面部份兄以经写出来了.

但是我并没有说 得很轻松.请不要误会了.

下面是我写的 最后的进度 可能不是很好.不过兄可以参考一下. 用无奈何兄的代码可能更好吧.
@echo off
set a==
set n=1
:t
cls
echo                        Loading Windows 2000...
echo %a%
set a=%a%=
set /a n+=1
if %n%==80 goto end
ping 2 172.1>nul
goto t
:end


2006-5-16 10:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 7 楼』:  

"破烂兄",呵呵,有意思,不过你的代码我测试了一下,我希望的是用">"来逐个代替“="来进行进程的显示,兄的代码好像就是”=“逐步往前推进吧!!!!!!!!

2006-5-16 10:52
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
doscc
中级用户




积分 256
发帖 93
注册 2006-3-26
来自 广东
状态 离线
『第 8 楼』:  

呵呵.是 没错 逐步往前推进
用>可能不是很好.>在批处理是有特殊意议的.不过可以用 》来代替 试试

2006-5-16 11:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 9 楼』:  

NO, NO ,NO,兄好像还没有明白我的意思,我的意思就是用“>"逐步代替"=",就是说“=“符号已经充满整个DOS行,然后用>符号逐步去替代,不是是">"逐步往前走,是代替

2006-5-16 11:06
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
doscc
中级用户




积分 256
发帖 93
注册 2006-3-26
来自 广东
状态 离线
『第 10 楼』:  

不好意思啊。是我理解错误.

下面是我改过的代码 不过在变量堪套 %b:~%n%% 时出错(我也不知道为什么出错)。如果没有出错就可以实现最后的进度了。
@echo off
set b=================================================================================
set b1=-
set n=1
:t1
cls
set b1=%b1%-
echo                        Loading Windows 2000...
echo %b1%%b:~%n%%
set /a n+=1
if %n%==80 goto end
ping 2 172.1 >nul
goto t1
:end


2006-5-16 11:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 11 楼』:  


@echo off
set b==
set /a flag = 1
call :began 80         rem 保存80个等号到变量b中
call :main %flag%   
exit

:began    rem 初始化b
set b=%b%=
set /a flag = %flag% + 1
if %flag% geq %1 goto :eof
goto began

:main    rem 显示
set b=%b:~1%
set a=%a%0
set /a newflag = newflag + 1
cls
for /l %%i in (1,1,20) do @echo.
echo                        Loading Windows 2000...
echo %a:0=^>%%b%
call :delay 100    rem 数字可以调整显示速度
if %newflag% equ %1 goto :eof
goto main

:delay    rem 延时
set /a num=num + 1
if %num% geq %1 (set num=) && goto :eof
goto delay
由于使用的结构是call和goto,所以代码很是臃肿,不过这种代码利于阅读,所以就用的这种机构。
    这个脚本其实主要要解决的问题应该是显示字符">"的问题,因为CMD默认是把它当作重定向来使用的,所以直接echo >是会出错的,正确的方法应该是在前面用符号"^"来转义。在批处理中连续赋">"到变量中并在最后用echo显示出来要用到的^符号是惊人的,所以干脆就用了set命令的替换功能,先赋值0到变量a中,然后在显示的时候把0全部替换成^>,并把变量b依次减少一位,这样就实现了模拟进度的显示。
    另外值得注意的一点就是在这个模拟显示中延时的问题,如果用ping来实现的话,由于ping在系统内部返回是需要消耗时间 的,所以就算用ping -n 1 -w 1 0.0.0.2 来处理都不能实现要求,在这个脚本中用的是goto延时,考虑到不同机器的时钟频率不尽相同,所以设置了延时过程(暂且叫它过程吧)的参数,如果觉得效果不好的话可以自行修改。(当然,利用wmic的强大功能也可以根据不同CPU的频率来自动调节参数,不过这就不是这个话题的讨论范围了)

2006-5-16 13:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  

另外关于依次显示字符的问题:
@echo off
call :显示文字 "操,再不开机老子砸了你" 80
goto :eof

:显示文字
setlocal ENABLEDELAYEDEXPANSION
set 显示字符=%1
set 显示速度=%2
if "%2" == "" set 显示速度=100
set 显示速度
for /l %%i in (0,1,1000) do (
          if %%i == 0 (
             set /p cxs=%cd%^><nul
          ) else (
             echo !显示字符:~%%i,1! | findstr /i "ECHO" >nul 2>nul && goto quit || (
             set /p cxs=!显示字符:~%%i,1!<nul
             for /l %%j in (1,1,%显示速度%) do @call %%j 2>nul)
          )
)
:quit
echo.
endlocal
为了便于阅读,把代码格式改改...

[ Last edited by 3742668 on 2006-5-16 at 15:02 ]

2006-5-16 14:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 13 楼』:  

谢谢3742668兄的代码,认真学习中...............无限佩服中 .......................呵呵

:》

2006-5-16 16:09
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
doscc
中级用户




积分 256
发帖 93
注册 2006-3-26
来自 广东
状态 离线
『第 14 楼』:  

谢谢 3742668版主.

下面是我改过后的代码 虽然不是很好不过改一改还是好一点.

我真傻啊 前面用 set b1=%b1%- 来逐步增加 记然想不到用set b=%b:~1%来减少
@echo off
set b================================================================================
set b1=-
set n=1
:t1
cls
set b1=%b1%-
set b=%b:~1%
echo                        Loading Windows 2000...
echo %b1%%b%
set /a n+=1
if %n%==80 goto end
ping 2 172.1 >nul
goto t1
:end
还有版主 下面代码为什么 只显示 b%%而不是123? 变量不可以堪套吗?
set a=123456789
set b=3
echo %a:~0,%b%%


2006-5-16 16:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
doscc
中级用户




积分 256
发帖 93
注册 2006-3-26
来自 广东
状态 离线
『第 15 楼』:  

是不是变量只能是 以!为扩搌符时 才可以堪套
像这个 !显示字符:~%%i,1!

2006-5-16 16:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: