无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 34134|回复: 24
打印 上一主题 下一主题

DOS有奖问答No2:怎样让程序强制返回DOS?

[复制链接]
跳转到指定楼层
1#
发表于 2005-4-7 07:51:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[这个贴子最后由gmy在 2005/04/08 02:40pm 第 2 次编辑]

为使大家深入讨论DOS技术,本版主会经常提出一些有难度的问题,回答正确的给予加威望等形式的奖励,并且原贴解固加精(解固是为了给下一题目让地方,加精是为了以后便于查阅)
DOS有奖问答No2:怎样让程序强制返回DOS?
    在批处理中,我们经常会调用程序(.com和.exe),但几乎所有程序退出后都回返回批处理,但有时我们不想这样,例如NTFSpro适于在DOS下操作,所以我们想让它加载完成后直接返回DOS,而不返回批处理。限制条件:必须用自动方式,不准用CTRL+BREAK中断等手工方式。
SORRY,忘记了一个条件: 在多重批处理中,如:
a.bat的内容:
:menu
...
call b.bat
goto menu
....
:end
b.bat的内容:
:menu
...
ntfspro.exe
...
:end

以上的ntfspro在加载后仅能返回menu,而无法返回DOS.因为DOS出口只有一个,即a.bat的END,但是被goto menu堵死了,怎么让NTFSpro直接退出到DOS呢? 我的想法是在NTFSpro后加一个小程序(功能是执行CTRL+BREAK的功能),但最好是仅通过批处理解决.
没有能回答吗?公布正确答案:
...
ntfspro.exe ;需要返回DOS使用的程序
command /k ;强行返回DOS
...
2#
发表于 2005-4-7 16:03:57 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

[这个贴子最后由zgzxp在 2005/04/07 04:06pm 第 1 次编辑]

XP下的CMD中可以在exit命令
在纯DOS中不要用CALL 调用了
因为CALL完后会返回调用BAT
直接在BAT中输入程序执行
EXAMPLE:
@ECHO OFF
CALL DISKGEN.EXE
EXIT
OR
@ECHO OFF
DISKGEN.EXE


因为没有装虚拟机,没有测试,理论上是可以的,仅供参考
回复

使用道具 举报

3#
发表于 2005-4-7 19:10:53 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

楼上可能记错了吧? CALL XXX.BAT 才能返回原批处理  不是XXX.EXE吧?
XXX..EXE后都返回的.
不过题目是不是有点矛盾?
你要XXX.EXE后不返回批处理,就把它放到批处理的最后呀
或者,IF XXX.EXE 成功 GOTO END 不就行了?
....
:END
回复

使用道具 举报

4#
发表于 2005-4-7 22:33:43 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

3楼说得有道理。
回复

使用道具 举报

5#
发表于 2005-4-8 08:44:45 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

晕,我是说不用CALL调用啊
用CALL运行后会返回调用他的BAT,不用就不会返回了啊
这是BAT的执行方式决定的嘛
回复

使用道具 举报

6#
发表于 2005-4-8 16:31:28 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

晕晕!
你看好了啊,我是说你没有区别开 CALL "BAT"文件和CALL "EXE"文件
好象没有CALL "EXE"文件的吧?
回复

使用道具 举报

7#
发表于 2005-4-8 20:44:07 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

楼主的题目简直是莫名其妙。
回复

使用道具 举报

8#
发表于 2005-4-8 23:49:24 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

应该是这样:
A中的Menu段,调用B,
B执行Exe后,返回A(Call的确是返回)
A再次Goto到Menu,进入死循环,不停的调用B,并在B中执行完Exe后返回A,再循环……
我的看法
第一,这是一个很无聊的死循环程序,除非我编昏了头,否则不会编出这种循环,只能用Ctrl+Pause或者Ctrl+C中止
第二,楼主所说的在B中加上Command.Com /K的说法并非完美,这样将会第二次运行Command.Com,将耗费掉部分系统资源,多次运行该程序将导致系统崩溃
回复

使用道具 举报

9#
发表于 2005-4-8 23:52:52 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

的确楼主说的Command.Com /K是一个方法,不过我在编制批处理时,不可能用到如此语句,而且,在软件以耗费系统资源为荣的现在,我依然保持一个20年前的好习惯,不停的优化代码,尽量降低软件对系统的占用和需求(虽然在奔腾4时代优化DOS相当无聊,不过这是我在批处理中的唯美标准)
回复

使用道具 举报

10#
 楼主| 发表于 2005-4-9 00:06:42 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?


接受批评,但坚决不改,在下一版的 超级急救盘 里将见到成效.
但大家至少应该学会使用command.com /k 这才是些题的看点.
回复

使用道具 举报

11#
发表于 2005-4-9 19:33:26 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

command /k
OK,试试。
回复

使用道具 举报

12#
发表于 2005-4-10 00:13:17 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

[这个贴子最后由gotomsdos在 2005/04/10 00:31am 第 5 次编辑]

支持gmy!!
现在明白了gmy的用意了!
尽管gmy给的调用BAT的例子没有说服力,反而会误导..
我给出一个例子可能会说明gmy的用意:
因为,只有在有条件和需要循环时, 才有需要某个程序跳出,
这是关键,否则的话,就无意义了..
(如果需要某个程序执行完跳出的话,可用COMMAND /K,
其实在C语言和LINUX的SHELL中,也有类似的语句的
C语言:是EXIT (0)
LINUX的SHELL:是 BREAK (退出大循环) CONTINUE (退出本次循环)
)
比如:
XXX.BAT(内容)
1.EXE
IF EXIST XXX 文件 COMMAND /K 2.EXE
3.EXE
比如,循环和选择时:
MIAN.BAT(内容)
:MAIN
ECHO 1 1程序
ECHO 2 2程序
ECHO 3 3程序
ECHO 4 正常退出
ECHO 请选择:
GET C 1234 >NUL
IF "%GET%"=="1" GOTO 1
IF "%GET%"=="2" GOTO 2
IF "%GET%"=="3" GOTO 3
IF "%GET%"=="4" GOTO END
:1
CALL 1.BAT
GOTO MAIN
:2
CALL 2.BAT
GOTO MAIN
:3
CALL 3.BAT
GOTO MAIN
:END
-------------
1.BAT(内容)
1.EXE
2.EXE
3.EXE
2.BAT(内容)
1.EXE
2.EXE
3.EXE
3.BAT(内容)
COMMAND /K 1.EXE (此为需要退出的程序)
回复

使用道具 举报

13#
发表于 2005-4-18 22:33:53 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

关注中......
回复

使用道具 举报

14#
发表于 2005-5-10 23:01:54 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

哎,不用CALL不就不会返回第一个BAT了?,就没有死循环啦?
回复

使用道具 举报

15#
发表于 2005-5-24 01:54:52 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

强制跳出批处理好象用DOS内部命令“EXIT”就可终止了,没试过
回复

使用道具 举报

16#
发表于 2005-5-25 01:34:54 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

[这个贴子最后由xusen在 2005/05/25 01:38am 第 1 次编辑]

想想
回复

使用道具 举报

17#
发表于 2005-6-22 12:08:13 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

Re ALL:
  同意 magictek 和 gotomsdos 的意见,关键不在于是否使用 command /k,而在于是否可以在子模块(在这里意为子bat)中强行中断进程。从软件工程学的角度上来讲,这样设计程序是不完善的,即使是在gotomsdos所说的菜单循环中,这只能说明程序的结构仍然需要改进。我建议在子模块中设置中断标志(变量或者文件),然后回到主模块后再判断标志来决定是否中断,中断的方法自然仍是Goto end。
  至于 command /k 的优劣,除了 magictek 提到的耗费资源外,还存在一个问题就是,如果在以后执行的命令行或者批处理中执行了 exit ,那么仍将返回子模块,因为command /k 并非返回原来的“领地”,而是闯入了新的“无人地带”,他仍有被遣返的隐忧。除此而外,command 的重复加载会带来相当多的内存兼容性问题,尤其是在启动盘之类TSR比较多的启动环境中。
回复

使用道具 举报

18#
发表于 2005-6-22 17:10:57 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

总觉这个问题没什么意义
回复

使用道具 举报

19#
发表于 2005-12-22 09:28:26 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

晕,想在DOS下做一个自己的启动菜单,那位老兄有高见,求助
回复

使用道具 举报

20#
发表于 2006-3-5 13:45:01 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

参与一下
以前用DOS,也出现过楼主说的这样的问题,也找到了解决办法,如下
如调用批处理后,不需要返回,则不用call命令,直接运行批处理就可以了。
如调用程序,也是不需要返回,则通过上面的方法同样实现,即再写一个批处理,通过第二个批处理来运行程序,程序运行完毕后不会再返回第一个批处理的,按楼主的内容重写命令如下:
a.bat的内容:
:menu
...
call b.bat
goto menu
....
:end
b.bat的内容:
:menu
...
ntfspro.bat
...
:end
ntfspro.bat的内容
ntfspro.exe
回复

使用道具 举报

21#
发表于 2006-3-5 21:07:34 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

好。
回复

使用道具 举报

22#
发表于 2006-5-5 23:02:12 | 只看该作者

DOS有奖问答No2:怎样让程序强制返回DOS?

不懂,不过我以前用的时候,用DOS下的RAR,然后用它的EXIT,
一样可以到DOS,
回复

使用道具 举报

23#
发表于 2006-6-2 23:14:28 | 只看该作者
顶起来,不错的帖子,论坛改版后就沉下去了
回复

使用道具 举报

24#
发表于 2006-8-15 12:09:36 | 只看该作者
同意palser的意见,这样的程序最好是设置中断标志,直接运行command /k是不可取的
回复

使用道具 举报

25#
发表于 2011-8-20 03:45:28 | 只看该作者
嘿嘿,路过,看看高手们过招儿~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-28 10:41

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表