如何在cmd.exe [关闭] 中禁止“终止批处理作业”

How can I suppress the "terminate batch job" in cmd.exe [closed]

提问人:cellcortex 提问时间:8/6/2009 最后编辑:James Eshcellcortex 更新时间:12/3/2020 访问量:34998

问:

闭。这个问题是题外话。它目前不接受答案。

想改进这个问题吗? 更新问题,使其符合 Stack Overflow 的主题

11年前关闭。

我正在寻找一种机制来抑制“终止批处理作业?(Y/N)“邀请,每当我在从批处理文件启动的程序中按 CTRL-C 时,我都会收到:

批处理文件:JSShell.bat:

@echo off
java -jar build-scripts\contrib\rhino1.7R1.jar

然后通过以下方式在 cmd shell 上启动它:

> jsshell.bat

这给了我一个可以通过 CTRL-C 退出的 shell,但在调用 CTRL-C 后,我收到一条“终止批处理作业 (Y/N)?”消息,这既讨厌又烦人。我怎样才能让它退出而不必按“y”?

批处理文件 cmd

评论

1赞 Macke 4/3/2013
FWIW,这个附加应用程序通过设置解决了这个问题,并带来了更多好东西。code.google.com/p/clink无法添加为答案,因为它已关闭。
1赞 bernard paulus 9/10/2013
另请参阅 superuser.com/questions/35698/...

答:

18赞 WireGuy 8/6/2009 #1

该行为在 cmd.exe 源代码中实现,如果不修改 cmd.exe,则无法关闭。但是,您可以修改 cmd.exe 以不显示该消息

评论

21赞 Saul Dolgin 8/6/2009
天哪,这是一些硬核修复。肯定要有一种不那么突兀的方式吗?
3赞 WireGuy 8/6/2009
您上一次开启 NOOP 是什么时候?好吧,如果你想让其他人使用,这不是一个好的解决方案。
22赞 cellcortex 8/16/2009
谢谢,但修补 cmd.exe 是我宁愿不想做的事情。
3赞 Dan Fabulich 10/17/2009
不适用于 Windows 7;cmd.exe 已发生重大变化。
2赞 Jason Kleban 3/25/2020
@Microsoft,你在听吗??
6赞 user169852 9/8/2009 #2

是的,有比修补cmd.exe更优雅的方法。只需将 START 放在您的命令前面即可。对于您的示例,该行将显示为:“START java -jar build-scripts\contrib\rhino1.7R1.jar”

评论

7赞 cellcortex 10/13/2009
这似乎打开了一个新的控制台窗口并在其中运行。
2赞 JonnyRaa 4/14/2014
使用 start /B 不获取新窗口
2赞 egor83 6/25/2014
@JonnyLeeds你没有以这种方式得到一个新窗口,但随后出现了另一个问题 - 当你在原始 shell 窗口中键入“exit”时,它不会关闭。
1赞 JonnyRaa 6/25/2014
@egor83 多么直观!很难相信 Windows 外壳有时有多可怕!
2赞 Antony Hatchkins 5/25/2015
@Jonny Leeds 除了禁止显示“终止批处理作业”提示并获得新窗口外,还可以取消 Ctrl-C。start /B
2赞 Elmo 10/14/2009 #3

下面的修改禁止显示“终止批处理作业?(Y/N)“新的控制台窗口:

start cmd /c java -jar build-scripts\contrib\rhino1.7R1.jar

评论

4赞 Dan Fabulich 10/17/2009
在我的计算机上打开一个新的控制台窗口。(我在 win7 上,但我怀疑这有什么不同。
0赞 cellcortex 10/21/2009
为我打开了 2 个新的控制台窗口
0赞 Elmo 10/21/2009
嗯,很奇怪。对我有用的示例是在托管模式浏览器中启动 GWT: start cmd /c %JAVA_HOME%/bin/java %JAVA_OPTS% -classpath %CLASSPATH% com.google.gwt.dev.GWTShell %GWT_OPTS% 当您双击 BAT 文件时,这会启动一个控制台窗口,但正如我上面提到的,它禁止终止批处理作业?(Y/N)“,并禁止启动其他控制台窗口。也许这个“犀牛”是一个控制台应用程序,因此必须在控制台中运行?
0赞 Sebastian 7/16/2014
诀窍是:start /b /wait %comspec% /c java ....
8赞 Dan Fabulich 10/19/2009 #4

不要忘记考虑通过避免使用批处理脚本来解决此问题。

  • Doskey 宏可以替换上面引用的单行批处理脚本。(在自动运行脚本中加载它们。
  • Cscript.exe 可在每台现代 Windows 计算机上使用,并且可以从命令行运行 JavaScript 和 VBScript 程序
  • 如果将您喜欢的脚本语言(Perl、Python、Ruby 等)的文件扩展名添加到 PATHEXT 环境变量并将脚本添加到您的路径中,则可以直接执行它们,而无需批处理脚本。

评论

1赞 cellcortex 11/19/2009
都是优点。但是,我的目标是在从 SVN 检出内容后开箱即用。因此,向 PATHEXT 或 autorun 添加内容是行不通的。
0赞 Dan Fabulich 11/24/2009
您的用户必须安装 Java,对吧?这只是又一步。
1赞 Joey 3/17/2011
@cellcortex:另请注意,VBScript 已在 Pathext 中。
0赞 David Mann 3/13/2015
我意识到这真的很老了,但我找到了这个问题,所以这里有一个非常有用的指南,用于实现上面列出的第一种方法 Doskey 之于 Windows,就像 Alias 之于 Unix 一样。几乎允许您复制 Unix 命令“alias”。好东西。
7赞 Brad 3/17/2011 #5

FWIW,管道“N”作为命令的输入对我适用于某些批处理文件(但我实际上想要新窗口)。也许它也对你有用。

(echo. N)| cmd /c java -jar build-scripts\contrib\rhino1.7R1.jar

评论

0赞 Simon Mattes 12/13/2015
请记住,这可能会导致与英语不同的语言出现问题。不过不错的解决方法。
0赞 Saic Siquot 9/18/2016
这至少在 Windows 7 上效果很好
0赞 dmidz 2/8/2017
哇,这在我的 Win10 机器上工作,带有区域设置 FR,智能且用户友好,因为它作为原始命令被记忆在历史队列中......与修补 cmd.exe...
0赞 FluorescentGreen5 2/4/2018
这应该是公认的答案
0赞 FluorescentGreen5 2/4/2018
哦,还有一件事,使用(不带)隐藏了 .(echo N).^C
4赞 SH4773R 8/29/2011 #6
@start cmd /c java -jar build-scripts\contrib\rhino1.7R1.jar
@exit

这将只生成一个窗口

评论

0赞 jpmc26 7/20/2013
它将打开一个新窗口并关闭当前窗口。略有不同,特别是因为新窗口不会有任何大小设置。另外,您可能的意思是,当程序退出时,将关闭第二个窗口,最后没有窗口。/k/c
0赞 Naghaveer R 10/19/2016
如何使用此命令添加 WAIT?“start /WAIT CMD /K”不起作用
2赞 nilskp 3/1/2012 #7

试试这个。它确实会打开一个新控制台,但它会在打开时锁定另一个控制台。

@echo off
start /WAIT java -jar build-scripts\contrib\rhino1.7R1.jar
27赞 Gringo Suave 11/3/2012 #8

在这个站点上,我终于找到了一个有效的解决方案:

script.cmd < nul

为了不必每次在我与上面一行相同的文件夹中调用第二个脚本时都键入此脚本。您可能希望反转名称。对我有用,但到目前为止仅在 XP 上进行了测试。script2.cmd