无忧启动论坛

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

DOS有奖问答No5:关于Terminate batch job(Y/N)

[复制链接]
跳转到指定楼层
1#
发表于 2005-11-11 17:44:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为使大家深入讨论DOS技术,本版主会经常提出一些有难度的问题,回答正确的给予加威望等形式的奖励,并且原贴加精,以便查阅。
DOS有奖问答No5:关于Terminate batch job(Y/N)

大家知道,在批命令执行时,如果按Crtl+Break,会出现如下提示信息:
Terminate batch job (Y/N)?
打入“Y”,不再执行其余命令,返回DOS。打入“N”,只结束当前命令,继续执行其余命令。
但是需要手工输入,很是不爽,我们如何让它自动选择“N”呢?
2#
发表于 2005-11-11 20:48:02 | 只看该作者

DOS有奖问答No5:关于Terminate batch job(Y/N)

[这个贴子最后由magictek在 2006/01/15 10:21pm 第 3 次编辑]

  葛老师又出有奖问答了,热烈欢迎先,正在努力想答案
  葛老师的意思是不是在执行批处理的时候按Ctrl+Break不再弹出对话框,而是直接中断当前语句?
  我尝试了一下,先编辑一个N.Txt,里面内容只有n以及一个回车,然后使用Batch.Bat < N.Txt,按Ctrl+Break即可不提示Terminate batch job(Y/N),只是稍稍停顿一会儿就继续了,但是我不太清楚是否已经中止了当前语句的执行,麻烦葛老师测试一下,谢谢。
  这个帖子我加密了,希望不影响其他人的思路和踊跃性,这个有奖问答完成后我会取消加密的。
回复

使用道具 举报

3#
发表于 2006-1-8 12:14:02 | 只看该作者

DOS有奖问答No5:关于Terminate batch job(Y/N)

Very easy!

在输入命令时, 在命令行后面加上:"|echo Yes"
小儿科的问题。
回复

使用道具 举报

4#
发表于 2006-1-11 01:46:44 | 只看该作者

DOS有奖问答No5:关于Terminate batch job(Y/N)

楼上朋友的方法,我测试过了,不行
回复

使用道具 举报

5#
发表于 2006-2-23 22:55:05 | 只看该作者

DOS有奖问答No5:关于Terminate batch job(Y/N)

我没有试过,但觉得用那些可以写键盘缓冲区的工具应该可以,可是不知道DOS在处理错误时是否清空了键盘缓冲区。
回复

使用道具 举报

6#
发表于 2006-3-5 13:22:11 | 只看该作者

DOS有奖问答No5:关于Terminate batch job(Y/N)

参与一下
首先,我还没法直接回答这个问题。
其次,我对2、3楼的回答发表一下看法:
2楼的回答相当于应答文件,一般用于批处理执行过程中对特定命令的自动回答,如我以前做过一个快速格式化命令
qformat.bat
:begin
if "%1"=="" goto end
echo format partition %1
format %1 /u/q/v:none < y.txt
shift
goto begin
:end
echo format ok
y.txt
y(此处有回车)
执行时运行 qformat d: e:,不需要人工参与,但对于楼主提出的问题,应属于批处理过程的突发事件,不应该单一用应答文件来处理,况且应答文件还有一个弱点,就是应答文件的内容必须完全满足其回答命令的参数需求,如上述的y.txt,如果只输入y而不加回车,就会导致命令死锁,这涉及到命令重定向的问题,再说就多了。
3楼的回答同二楼类似,都属于输出重定向,之所以不行,是因为只给命令转入了yes的回答,但没加回车,而Terminate batch job(Y/N)的提示除了要求输入y/yes,还要回车确认的。
最后发表一下我的意见
我不清楚楼主问这个问题的本意,但我在DOS命令中常出现这种情况一般是在程序需要应答的时候,如上面的快速格式化程序,一般我会加上提示:
echo this program will format the partition %1
echo if you sour to do that, press ENTER to continue
echo else you can press CTRL + C to break the job.
pause > nul
format %1 /u/q/v:none
这样在格式化命令前,会要求用户确认,按回车执行格式化,按CTRL + C中止批处理,会提示Terminate batch job(Y/N),按y回车则退出。
如果在上述情况下,想让程序不出现Terminate batch job(Y/N)的提示,可以考虑其它方法,如:
echo this program will format the partition %1
set /p ans=do you sure to do that?[y/n]
if /i "%ans%" equ "y" then
(do format)
else
(don';t format)
但echo /p的命令在win98之前(含)的DOS版本中不支持。
当然也可以借助其它命令,如choice
choice do you soue to do that?
if errorlevel 2 then goto end
errorlevel 2 则表示用户选择了n,choice.com命令属于DOS的外部命令,在一般的系统盘中可以找到,具体用法可参照其帮助。
回复

使用道具 举报

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

使用道具 举报

8#
发表于 2006-8-6 18:26:28 | 只看该作者
这个问题困惑我很久了
2楼的方法只是表面有效
实际使用中多按几次就会出错中止的
不过这个答案还是符合lz本意的
在这里我想请教下
怎么彻底的屏蔽掉ctrl+c呢
因为我不想别人结束批处理
回复

使用道具 举报

9#
发表于 2009-6-1 19:56:29 | 只看该作者
可以的!  此问题我遇见过!
回复

使用道具 举报

10#
发表于 2009-6-3 11:02:44 | 只看该作者
4年前的帖子,lz应该发布答案了吧
回复

使用道具 举报

11#
发表于 2009-6-3 14:23:30 | 只看该作者
用ansi.sys 可以重新定义 Ctrl+Break 键值,但是 Ctrl+c 就不知道了。
解开压缩包 break.ZIP (77.5 KB, 下载次数: 136) 在纯dos下运行里面的x.bat 看看,这是一个死循环脚本,是不是无法通过 Ctrl+break 中断循环?当然可以通过 Ctrl+c的方式中断。
回复

使用道具 举报

12#
 楼主| 发表于 2009-6-3 17:11:59 | 只看该作者
其实我也没有正确答案,好在这一问题已经不再使用了(可能已经通过其它方法避开出现这个了)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-16 00:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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