无忧启动论坛

标题: DOS有奖问答No2:怎样让程序强制返回DOS? [打印本页]

作者: gmy    时间: 2005-4-7 07:51
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
[这个贴子最后由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
...
作者: zgzxp    时间: 2005-4-7 16:03
标题: 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


因为没有装虚拟机,没有测试,理论上是可以的,仅供参考
作者: gotomsdos    时间: 2005-4-7 19:10
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
楼上可能记错了吧? CALL XXX.BAT 才能返回原批处理  不是XXX.EXE吧?
XXX..EXE后都返回的.
不过题目是不是有点矛盾?
你要XXX.EXE后不返回批处理,就把它放到批处理的最后呀
或者,IF XXX.EXE 成功 GOTO END 不就行了?
....
:END

作者: 6618    时间: 2005-4-7 22:33
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
3楼说得有道理。
作者: zgzxp    时间: 2005-4-8 08:44
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
晕,我是说不用CALL调用啊
用CALL运行后会返回调用他的BAT,不用就不会返回了啊
这是BAT的执行方式决定的嘛

作者: gotomsdos    时间: 2005-4-8 16:31
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
晕晕!
你看好了啊,我是说你没有区别开 CALL "BAT"文件和CALL "EXE"文件
好象没有CALL "EXE"文件的吧?
作者: Climbing    时间: 2005-4-8 20:44
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
楼主的题目简直是莫名其妙。
作者: magictek    时间: 2005-4-8 23:49
标题: 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,将耗费掉部分系统资源,多次运行该程序将导致系统崩溃
作者: magictek    时间: 2005-4-8 23:52
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
的确楼主说的Command.Com /K是一个方法,不过我在编制批处理时,不可能用到如此语句,而且,在软件以耗费系统资源为荣的现在,我依然保持一个20年前的好习惯,不停的优化代码,尽量降低软件对系统的占用和需求(虽然在奔腾4时代优化DOS相当无聊,不过这是我在批处理中的唯美标准)
作者: gmy    时间: 2005-4-9 00:06
标题: DOS有奖问答No2:怎样让程序强制返回DOS?

接受批评,但坚决不改,在下一版的 超级急救盘 里将见到成效.
但大家至少应该学会使用command.com /k 这才是些题的看点.
作者: 6618    时间: 2005-4-9 19:33
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
command /k
OK,试试。
作者: gotomsdos    时间: 2005-4-10 00:13
标题: 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 (此为需要退出的程序)

作者: jrws520    时间: 2005-4-18 22:33
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
关注中......
作者: magictek    时间: 2005-5-10 23:01
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
哎,不用CALL不就不会返回第一个BAT了?,就没有死循环啦?
作者: xusen    时间: 2005-5-24 01:54
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
强制跳出批处理好象用DOS内部命令“EXIT”就可终止了,没试过
作者: xusen    时间: 2005-5-25 01:34
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
[这个贴子最后由xusen在 2005/05/25 01:38am 第 1 次编辑]

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

作者: Brglng    时间: 2005-6-22 17:10
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
总觉这个问题没什么意义
作者: mszair    时间: 2005-12-22 09:28
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
晕,想在DOS下做一个自己的启动菜单,那位老兄有高见,求助
作者: sidac    时间: 2006-3-5 13:45
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
参与一下
以前用DOS,也出现过楼主说的这样的问题,也找到了解决办法,如下
如调用批处理后,不需要返回,则不用call命令,直接运行批处理就可以了。
如调用程序,也是不需要返回,则通过上面的方法同样实现,即再写一个批处理,通过第二个批处理来运行程序,程序运行完毕后不会再返回第一个批处理的,按楼主的内容重写命令如下:
a.bat的内容:
:menu
...
call b.bat
goto menu
....
:end
b.bat的内容:
:menu
...
ntfspro.bat
...
:end
ntfspro.bat的内容
ntfspro.exe

作者: 我是神仙    时间: 2006-3-5 21:07
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
好。
作者: userid    时间: 2006-5-5 23:02
标题: DOS有奖问答No2:怎样让程序强制返回DOS?
不懂,不过我以前用的时候,用DOS下的RAR,然后用它的EXIT,
一样可以到DOS,
作者: magictek    时间: 2006-6-2 23:14
顶起来,不错的帖子,论坛改版后就沉下去了
作者: honny74    时间: 2006-8-15 12:09
同意palser的意见,这样的程序最好是设置中断标志,直接运行command /k是不可取的
作者: 2011hbboyxu    时间: 2011-8-20 03:45
嘿嘿,路过,看看高手们过招儿~~~




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3