【问题标题】:How can I suppress the "terminate batch job" in cmd.exe [closed]如何抑制 cmd.exe 中的“终止批处理作业”[关闭]
【发布时间】:2009-08-05 17:14:06
【问题描述】:

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

批处理文件:jsshell.bat:

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

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

> jsshell.bat

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

【问题讨论】:

标签: batch-file cmd


【解决方案1】:

在这个site,我终于找到了有效的解决方案:

script.cmd < nul

不必每次我在与上一行相同的文件夹中创建第二个名为script2.cmd 的脚本时都输入此内容。您可能想要颠倒名称。对我有用,但目前仅在 XP 上测试过。

【讨论】:

    【解决方案2】:

    该行为在 cmd.exe 源代码中实现,不修改 cmd.exe 无法关闭。不过你可以modify cmd.exe to not show the message

    【讨论】:

    • 天哪,这是一些硬核修复。肯定有一种不那么突兀的方式吗?
    • 您最后一次使用 NOOP 是什么时候?好吧,如果您想让其他人使用,这不是一个很好的解决方案。
    • 谢谢,但是修补 cmd.exe 是我不想做的事情。
    • 不适用于 Windows 7; cmd.exe 发生了很大变化。
    • @Microsoft,你在听吗??
    【解决方案3】:

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

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

    【讨论】:

    • 所有优点。但是,我的目标是在从 SVN 签出内容后开箱即用。所以向 PATHEXT 或 autorun 添加东西是行不通的。
    • 您的用户必须安装 Java,对吗?这只是又一步。
    • @cellcortex: 另请注意,VBScript 已经在 Pathext 中。
    • 我意识到这真的很老了,但我发现了这个问题,所以这里有一个非常有用的指南,用于实现上面列出的第一种方法Doskey is to Windows as Alias is to Unix。几乎可以让您复制 Unix 命令“别名”。好东西。
    【解决方案4】:

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

    【讨论】:

    • 这似乎打开了一个新的控制台窗口并在其中运行。
    • 使用 start /B 不获取新窗口
    • @JonnyLeeds 以这种方式无法获得新窗口,但随后出现另一个问题 - 当您在原始 shell 窗口中键入“退出”时,它不会关闭。
    • @egor83 多么直观!很难相信 windows shell 有时有多糟糕!
    • @Jonny Leeds 和 start /B 除了禁止提示“终止批处理作业”并获得一个新窗口之外,您还可以禁止 Ctrl-C。
    【解决方案5】:

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

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

    【讨论】:

    • 请记住,这可能会导致与英语不同的语言出现问题。不过很好的解决方法。
    • 这至少在 Windows 7 上效果很好
    • 哇,这在我的 Win10 机器上运行良好,区域设置为 FR,智能且用户友好,因为它作为原始命令存储在历史队列中...与修补 cmd.exe 相比...
    • 这应该是公认的答案
    • 哦,另外一件事,使用(echo N)(没有.)隐藏了^C
    【解决方案6】:
    @start cmd /c java -jar build-scripts\contrib\rhino1.7R1.jar
    @exit
    

    这只会创建一个窗口

    【讨论】:

    • 它将打开一个新窗口并关闭当前窗口。略有不同,特别是因为新窗口不会有任何大小设置。另外,您的意思可能是/k,因为/c 将在程序退出时关闭第二个窗口,让您最后没有窗口。
    • 如何用这个命令添加等待? “启动 /WAIT CMD /K”不起作用
    【解决方案7】:

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

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

    【讨论】:

    • 在我的机器上打开一个新的控制台窗口。 (我在 win7 上,但我怀疑这会有所不同。)
    • 为我打开 2 个新的控制台窗口
    • 嗯,很奇怪。对我有用的示例是在托管模式浏览器中启动 GWT: start cmd /c %JAVA_HOME%/bin/java %JAVA_OPTS% -classpath %CLASSPATH% com.google.gwt.dev.GWTShell %GWT_OPTS% 这会启动一个当您双击 BAT 文件时的控制台窗口,但是 - 正如我上面提到的 - 禁止终止批处理作业? (Y/N)" 退出并禁止启动额外的控制台窗口。也许这个“犀牛”是一个控制台应用程序,因此必须在控制台中运行?
    • 诀窍是:start /b /wait %comspec% /c java ....
    【解决方案8】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-22
      • 2016-11-08
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多