有没有一种方法可以在批处理文件中写入Ctrl-C?

时间:2020-05-13 18:04:37

标签: batch-file cmd

是否可以在批处理文件中使用ctrl-c而不需要用户输入ctrl-c


在批处理文件和命令提示符中,输入ctrl-c通常会中断诸如for循环或批处理作业之类的命令。我到处乱逛一下,看看实际的break命令是否有任何用处(即使命令扩展已无用,它也确实没有用),我想“ 是否可以编写ctrl- c是在批处理文件中还是在命令行上?“”我尝试做的第一件事是使用forfor /l语句中的if循环进行do步骤1}}部分将if %a LEQ 9500 (^^C)表示为^C是您输入ctrl-c破坏某事物时的显示方式。当我运行完整命令(for /l %a in (10000, -1, 1) do (if %a LEQ 9500 (^^C)))时,当'^C' is not recognized as an internal or external command, operable program or batch file.低于9500时,发生了错误%a。我还使用%%a在批处理文件中尝试了同样的操作,并且有同样的错误。然后,我尝试使用break以及扩展名和关闭名的扩展名,但仍然无法正常工作。

我想学什么

所以总的来说,我想弄清楚ctrl-c的等效命令以及如何使用它。

2 个答案:

答案 0 :(得分:3)

选中此thread

这是dbenham的退出函数,它使用-1073741510作为退出代码来模拟.bat脚本中的ctrl-c

:ExitBatch - Cleanly exit batch processing, regardless how many CALLs
if not exist "%temp%\ExitBatchYes.txt" call :buildYes
call :CtrlC <"%temp%\ExitBatchYes.txt" 1>nul 2>&1
:CtrlC
cmd /c exit -1073741510

:buildYes - Establish a Yes file for the language used by the OS
pushd "%temp%"
set "yes="
copy nul ExitBatchYes.txt >nul
for /f "delims=(/ tokens=2" %%Y in (
  '"copy /-y nul ExitBatchYes.txt <nul"'
) do if not defined yes set "yes=%%Y"
echo %yes%>ExitBatchYes.txt
popd
exit /b

在脚本末尾添加此内容,就可以使用call :ExitBatch

如果要查看提示消息,请调用:CtrlC函数

答案 1 :(得分:0)

STATUS_CONTROL_C_EXIT方法取决于语言,这就是 @dbenham 包含

的原因
copy/-Y nul [ANY FILE THAT EXISTS]

输出

[垃圾](是/否/全部)?

在这种情况下,我们显然希望使用Yes(或计算机运行的任何语言),因此需要delims=(/


这是一种与语言无关的解决方案,例如Ctrl-C,它会立即终止所有批处理:

@echo off

FOR /L %%I in () do call:break 1000

NEVER REACHED

:break RETURN_EXIT_CODE
cmd /c exit %1
call:halt >nul 2>&1


:halt - Infinite Recursion
call:halt