有没有办法在批处理文件中写入Ctrl-C?

问题描述 投票:1回答:1

有没有办法在批处理文件中使用 ctrl-c 在批处理文件中,用户无需输入 ctrl-c?


在批处理文件和命令提示符中,输入 ctrl-c 将会打断一个命令,就像 for 循环或一般的批处理作业。我想看看实际的 break 命令有什么用处(真的没有,即使是命令扩展也没有用),我觉得"有没有办法将ctrl-c写入批处理文件或命令行中?" 我首先尝试的是做一个步骤 for 循环使用 for /l 附带 if 声明中 do 条文 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.%a 到了9500以下。我也在批处理文件中尝试了同样的事情,用了 %%a 并出现同样的错误。然后我尝试使用 break 以及用分机开了又关,还是不行。

我想学习的是

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

batch-file cmd
1个回答
3
投票

检查这个

下面是退出功能,通过 dbenham 使用 -1073741510 作为退出代码,以模拟 ctrl-c 在一个.bat脚本中。

: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 功能


0
投票

STATUS_CONTROL_C_EXIT 方法是依赖于语言的,这就是为什么 @dbenham 包括

copy/-Y nul [ANY FILE THAT EXISTS]

其中输出

Rubbish](YesNoAll)?

在这种情况下,我们显然要 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
© www.soinside.com 2019 - 2024. All rights reserved.