中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 通过大家努力,批处理可告别choice
« [1] [2] [3] [4] »
作者:
标题: 通过大家努力,批处理可告别choice 上一主题 | 下一主题
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 16 楼』:  



  Quote:
Originally posted by s11ss at 2008-12-9 22:48:


无按键是直接回车的情况么?如果只用0号的话,al是0d啊

无按键就是沒动键盘.

2008-12-10 08:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 17 楼』:  

真的很强,像我等不懂汇编的就只能望洋兴叹了。



┌───────┐
├→学习→实践→┤
└───────┘
2008-12-10 14:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 18 楼』:  

上面的程序中mov ax,0长3字节,改mov ah,0或xor ah,ah或sub ah,ah就能少1个字节。

其实,此类程序最短的只要8字节。

DEBUG
a
  mov ah,0
  int 16h
  mov ah,4Ch
  int 21h

rcx
8
nkeycode.com
w
q

   此帖被 +7 点积分      点击查看详情   
评分人:【 s11ss 分数: +7  时间:2008-12-10 14:53




my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2008-12-10 14:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 19 楼』:  



  Quote:
Originally posted by 本是 at 2008-12-10 02:31 PM:
上面的程序中mov ax,0长3字节,改mov ah,0或xor ah,ah或sub ah,ah就能少1个字节。

其实,此类程序最短的只要8字节。

DEBUG
a
  mov ah,0
  int 16h
  mov ah,4Ch
...

我的意思就是不用int 16h的1号功能,看来还是行的~

其实好像可以不写com,直接用debug调用:)

2008-12-10 14:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 20 楼』:  



  Quote:
Originally posted by 本是 at 2008-12-10 14:31:
上面的程序中mov ax,0长3字节,改mov ah,0或xor ah,ah或sub ah,ah就能少1个字节。

其实,此类程序最短的只要8字节。

DEBUG
a
  mov ah,0
  int 16h
  mov ah,4Ch
...

还是误解了,试一下12楼的例子就会发现与上面的程序不一样之处

2008-12-10 15:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 21 楼』:  


@echo off
call inc 2>nul
if %errorlevel%==1 (
   >inc.src echo ecs:100 B8 00 01 CD 16 B8 00 00 74 02 CD 16 B4 4C CD 21
   >>inc.src echo rcx
   >>inc.src echo 10
   >>inc.src echo w
   >>inc.src echo q
   debug inc.com < inc.src 2>nul 1>nul
   del inc.src
)
:loop
inc


echo %errorlevel%



if not %errorlevel%==0 (
   if %errorlevel%==81 goto :eof ::q or Q exit
   if %errorlevel%==113 goto :eof
)
ping -n 2 127.1>nul
goto loop
或试一下这个,没输入时循环一直在跑.而不是等输入.

本帖主要就是用int 16h的ah=1,(也就是它与choice的主耍区别)没说清楚就毫无意义.
也许是我的表达能力不行,站内高手云云,有谁能邦我说明白?

[ Last edited by wangff on 2008-12-10 at 17:51 ]

2008-12-10 15:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 22 楼』:  



  Quote:
Originally posted by s11ss at 2008-12-10 14:55:


我的意思就是不用int 16h的1号功能,看来还是行的~

其实好像可以不写com,直接用debug调用:)

不用com也行,但要有脚本 如 c.txt
a
MOV     AX,0100
INT     16
MOV     AX,0000
JZ      010C
INT     16
MOV     AH,4C
INT     21

g
q
p代码:
@echo off

:loop
debug <c.txt>nul


echo %errorlevel%



if not %errorlevel%==0 (
   if %errorlevel%==81 goto :eof ::q or Q exit
   if %errorlevel%==113 goto :eof
)
ping -n 2 127.1>nul
goto loop
效果一样.

[ Last edited by wangff on 2008-12-10 at 17:52 ]

2008-12-10 17:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 23 楼』:  

只用int 16h功能ah=0的例子:

脚本: a.txt
a
  mov ah,0
  int 16
  mov ah,4C
  int 21

g
q
p代码:
@echo off

:loop
debug <a.txt>nul


echo %errorlevel%



if not %errorlevel%==0 (
   if %errorlevel%==81 goto :eof ::q or Q exit
   if %errorlevel%==113 goto :eof
)
ping -n 2 127.1>nul
goto loop


2008-12-10 18:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 24 楼』:  

可以不要临时文件的
goto :main
a
;MOV     AX,0100
;INT     16
MOV     AX,0000
;JZ      010C
INT     16
MOV     AH,4C
INT     21

g
q

:main
@echo off

:loop
debug <"%~f0">nul


echo %errorlevel%



if not %errorlevel%==0 (
   if %errorlevel%==81 goto :eof ::q or Q exit
   if %errorlevel%==113 goto :eof
)
ping -n 2 127.1>nul
goto loop


   此帖被 +22 点积分          点击查看详情   
评分人:【 wangff 分数: +2  时间:2008-12-10 19:24
评分人:【 zh159 分数: +20  时间:2008-12-10 21:45


2008-12-10 19:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 25 楼』:  

加两行快速清除“goto :main”显示和支持中文显示(XP测试)

  Quote:
......

:main
cls
@echo off
chcp 437|graftabl 936>nul

......



   此帖被 +4 点积分        点击查看详情   
评分人:【 wangff 分数: +2  时间:2008-12-10 22:45
评分人:【 wxcute 分数: +2  时间:2008-12-12 12:44




2008-12-10 21:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pyjhhh
初级用户





积分 54
发帖 26
注册 2007-2-10
状态 离线
『第 26 楼』:  

好帖子

2008-12-10 23:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 27 楼』:  

2楼可带参数的完善版:
@echo off
goto main
a
MOV     AL,[005D]
CMP     AL,20
JNZ     0110
MOV     AH,01
INT     16
MOV     AX,0000
JZ      0112
INT     16
MOV     AH,4C
INT     21

g
q
:main
chcp 437|graftabl 936>nul
set/p =input:<nul
::有参数(任意)等待输入一个字符,通过errorlevel返回
debug a.com i<"%~f0">nul 2>nul
echo %errorlevel%
:loop
::无参数检测是否有按键 无:errorlevel=0 有errorlevel=键值 可用干运行中动态检测按键
debug<"%~f0">nul
echo %errorlevel%
if not %errorlevel%==0 (
   if %errorlevel%==81 goto :eof ::q or Q exit
   if %errorlevel%==113 goto :eof
)
ping -n 2 127.1>nul
goto loop


   此帖被 +20 点积分         点击查看详情   
评分人:【 zh159 分数: +20  时间:2008-12-11 09:31


2008-12-11 09:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangff
初级用户





积分 134
发帖 54
注册 2008-11-19
状态 离线
『第 28 楼』:  

自动运行:
@echo off
goto main
a
MOV     AL,[005D]
CMP     AL,20
JNZ     0110
MOV     AH,01
INT     16
MOV     AX,0000
JZ      0112
INT     16
MOV     AH,4C
INT     21

g
q
:main
chcp 437|graftabl 936>nul
set/p =等待...<nul&set/a n=0
:loop
set/a n+=1
set/p =.%n%<nul
debug<"%~f0">nul
if not %errorlevel%==0 (
   if %errorlevel%==81 goto :eof ::q or Q exit
   if %errorlevel%==113 goto :eof
)
if %n% gtr 5 goto p1
ping -n 2 127.1>nul
goto loop

:p1
echo.
echo 计时到,自动运行!
pause


   此帖被 +1 点积分    点击查看详情   
评分人:【 Helloworld 分数: +1  时间:2008-12-11 13:19


2008-12-11 10:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Helloworld
新手上路





积分 9
发帖 9
注册 2008-11-29
状态 离线
『第 29 楼』:  

兄们的创造能力实在是厉害!

2008-12-11 13:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 30 楼』:  

告别choice,这么说好像有点牵强,choice功能还是相对强大的说:)

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


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



论坛跳转: