这是脚本foo.cmd:
@echo off
echo hi
set /p foobar="???"
echo bye在set /p提示下,我按Ctrl+C取消脚本。在这一点上,有几种可能发生的事情之一,似乎是随机选择的:
^C出现,Terminate batch job (Y/N)?^C出现,然后是The syntax of the command is incorrect.,然后脚本终止,没有回显bye.^C,脚本继续,回显bye.我也看到过像1或2这样的情况,但是^C出现在“终止”提示或语法错误消息之后。
连续三次尝试的实际输出:
C:\Users\Me\Documents>foo.cmd
hi
???^CThe syntax of the command is incorrect.
C:\Users\Me\Documents>foo.cmd
hi
???^Cbye
C:\Users\Me\Documents>foo.cmd
hi
???^CTerminate batch job (Y/N)? y
C:\Users\Me\Documents>我在7年前发现了一个相关的问题,但答案没有包括对为什么会发生这种情况的任何解释:set /p reads ctrl+c as input instead of terminating the script
发布于 2021-12-15 07:13:57
set /p是cmd的内部命令之一,等待输入。停止进程的CTRL+C在内部扼杀了set /p进程。
正如另一个内部进程timeout所演示的那样,结果是相似的,但是有一个实例将^C字符用换行符分隔开。这个批处理文件只包含timeout /t 5,然后我随机地执行CTRL+C:

为了证明CTRL+C正在扼杀示例中的内部进程,然后是主进程,我们可以在脚本本身中创建CTRL+C ( exit code create ^C的所有功劳都归于用户DBenham )。
@echo off
echo hi
set /p foobar="???" || cmd /c exit -1073741510
echo bye当运行此命令并在Enter提示符下按下set /p时,将完成set命令,在发出^C后直接执行该命令。对于每次运行,结果将保持相同,因为CTRL+C只有要关闭的主进程:

https://stackoverflow.com/questions/70356107
复制相似问题