我们的应用程序使用 3 个数据库,一个包含客户数据,两个包含配置数据。为了防止破坏客户数据,删除客户数据库的批处理文件首先会显示警告消息,然后暂停。
我刚刚打电话给删除客户数据库在我的计算机上意外地(没有损失;只是复制了),当出现暂停提示时,我只需按Ctrl+ C。 Windows 不会直接终止,而是询问我是否要终止批处理作业。
所以我又按了一次Ctrl+,C因为在我看来,Ctrl+C意味着不要继续,因为我的手指仍然放在那些键上。批处理文件继续运行并删除了数据库(这意味着我需要恢复它,导致我的电脑无法使用两个小时)。
为什么 WindowsCMD.EXE
认为当我按下CTRL+C终止批处理作业提示,这意味着我实际上想继续(换句话说,为什么Ctrl+C在这种情况下意味着是, 而不是否)?
在 Linux 中,shell 实际上会执行您要求它执行的操作,即终止脚本而不询问无意义的问题。没有人会在 DOS 框中意外按下Ctrl+ C(除非他们认为自己是在文本编辑器中,而不是在 DOS 框中)。
答案1
有两个级别CtrlC:
- 在前台运行的任何 .exe 文件的级别,可以或不可以停止其工作
- 第二级是 .bat 文件,您可以从中运行 .exe 文件
第三级是 cmd.exe 本身。
这里的问题是,它CtrlC会经过两个级别,实际上会询问您是否要停止批处理文件(级别 2),因此如果您说Y- 您的批处理文件将立即终止。如果您说 -N会发生什么,批处理文件将从下一个命令继续运行。