在cmd中,当我们按Ctrl + C组合键时,将终止目标应用程序,但是如果从批处理文件中调用了目标应用程序,则会得到此“终止批处理作业(Y / N)”的确认。我永远不会记得我选择不终止批处理作业的情况。我们如何跳过此确认?
N
。我很好奇在输入后批处理脚本终止的情况是什么N
?
-n
开关进行cygwin ping。
在cmd中,当我们按Ctrl + C组合键时,将终止目标应用程序,但是如果从批处理文件中调用了目标应用程序,则会得到此“终止批处理作业(Y / N)”的确认。我永远不会记得我选择不终止批处理作业的情况。我们如何跳过此确认?
N
。我很好奇在输入后批处理脚本终止的情况是什么N
?
-n
开关进行cygwin ping。
Answers:
AFAIK您不能这样做,因为此行为是设计使然并由命令解释器控制的。除非您直接反编译并重新编译解释器,否则没有“映射”甚至“拦截”该方法的方法。
start
在像sgmoore建议superuser.com/questions/35698/...似乎是一个完全正常的解决方法给我。
按Ctrl+ C两次。
Ctrl
和挖掘C
与击球再次Y
然后Enter
。
在此站点上,我找到了有效的解决方案:
script2.cmd < nul
不必每次都script.cmd
在与上一行相同的文件夹中创建另一个脚本时键入此内容。我仅在XP上测试了此技术,但其他人已在Win 7上证实了这一技术。
内森补充说:另一种选择是将以下代码放在script.cmd的顶部,该脚本在一个文件中执行相同的操作:
rem Bypass "Terminate Batch Job" prompt.
if "%~1"=="-FIXED_CTRL_C" (
REM Remove the -FIXED_CTRL_C parameter
SHIFT
) ELSE (
REM Run the batch with <NUL and -FIXED_CTRL_C
CALL <NUL %0 -FIXED_CTRL_C %*
GOTO :EOF
)
@IF ""=="%1" (@%0 CALLED < nul) ELSE (@[your command])
。递归调用自身,但第二次带有参数。如果您的脚本具有参数,则可能使用第一个未使用的位置参数。如果您的脚本有很多参数,那可能会有问题。我的脚本不需要参数或用户输入。
安装Clink并更改“ terminate_autoanswer”设置。设置文件应该在这里:C:\Users\<username>\AppData\Local\clink\settings
。
# name: Auto-answer terminate prompt
# type: enum
# Automatically answers cmd.exe's 'Terminate batch job (Y/N)?' prompts. 0 =
# disabled, 1 = answer 'Y', 2 = answer 'N'.
terminate_autoanswer = 1
然后,这对任何cmd.exe窗口都“有效”。您无需更改正在运行的内容,因为可以在cmd.exe上进行附加链接。
弗里金真棒,海事组织!
\cmder\config\settings
。在此处查看相关问题github.com/cmderdev/cmder/issues/1666
如果您在应用程序正常完成后不需要在批处理文件中执行任何操作,则使用该start
命令可确保在按Ctrl-C时该批处理文件已完成。因此,该消息将不会出现。
例如:
@回声关闭 设置my_command = ping.exe 设置my_params = -t www.google.com echo由“开始”执行的命令:%my_command%%my_params% ::不使用/ B或/ WAIT时,这将创建一个新窗口,而 ::此批处理文件的执行将在当前窗口中继续: 开始%my_command%%my_params% 回声。 echo这行将在“开始”完成之前执行。所以这 在另一个窗口中按Ctrl-C之前,echo批处理文件将完成。 回声。 ::仅用于测试,请使用“暂停”显示“按任意键继续”,以查看 ::'echo'命令的输出。确保在窗口中按Ctrl-C ::运行“ ping”命令(不在此窗口中)。或者只是删除 ::混淆时的下一行: 暂停
(在Windows XP上测试。)
start
真的有帮助,但这对我来说似乎很合理。因此,我想知道投票是否暗示这行不通吗?或者,也许谁被否决不知道Windows的命令start
(尤其是start /wait
and start /b
)?然后,请参阅microsoft.com/resources/documentation/windows/xp/all/proddocs/…。请解释下票?
start
将无法正常工作。每当cmd运行批处理文件时,点击Ctrl + C都会导致当前正在运行的进程终止并显示问题。
start
%my_command%
%my_params%
start "some title here" %my_command% %my_params%
""
/TITLE
/T
我一直在为避免“终止批处理作业”提示而奋斗一会儿。
我最近的顿悟是,通过将一个实例替换为另一个实例,有些花招cmd.exe
。这是start cmd /k
通过exit
在以下位置紧接着在.BAT
文件中执行命令/程序来完成的。
原来的控制台窗口消失了,可以通过Ctrl- 彻底停止替换的控制台窗口C。
考虑以下示例,该示例traceroute
可以被Ctrl+ 中断C或允许其完成,从而使用户返回C:\>
提示:
@echo off
set timeout=100
if not "%2"=="" set timeout=%2
start cmd /k tracert -w %timeout% %1
exit
新命令解释器的环境替代可能并不适合每个人,但肉眼看来对我来说很好用。
exit /b
退出批处理脚本
在我的情况下,正是我的用户目录(在Vista中为C:\ Users \或在XP中为C:\ Documents and Settings \)中的ping.bat文件不确定地保存了批处理作业。
每当我从命令提示符运行ping时,都会执行此批处理文件,当前目录是我的用户目录。从“运行”窗口或其他用户目录执行的ping操作正常。
从我的用户目录中删除了文件,问题已解决!
开始工作,但现在批处理文件打开的窗口已从我的选项中更改,并且“属性”被禁用(不会响应)。
我遇到了一个EXE,它似乎在退出时将^ C扔给了父批处理,甚至在干净的退出时也会引起“终止批处理作业”提示。
我选择使用的解决方案是使用“开始”运行批处理,与其他答案类似,但是从PowerShell提示符下(或通过CMD的PowerShell解释器方法(如果选择))。
现在是2018年,在Windows 10中,Microsoft已开始使用PowerShell作为首选命令提示符来取代CMD,因此默认情况下它可以在GUI中轻松使用。
Start
是Start-Process的别名。
运行时,它将启动并返回。因此,当您停止启动的过程时,没有“终止批处理作业”提示。
默认情况下,它不等待,因此除了命令及其参数之外,不需要其他参数。
start mything.exe -mythings -arguments
在我的批次中使用效果很好。
在PowerShell中,脚本必须在其路径之前启动,因此我将运行批处理文件为.\host.bat
。
TCC / LE是CMD的免费替代品(认为它是CMD ++),具有禁止终止批处理作业提示的选项。您可以在“ TCC启动配置”对话框中找到该选项:
在Ctrl-C上取消批处理文件:按Ctrl-C时,没有通常的提示就取消批处理文件处理。
屏幕截图:
如果您以前从未听说过TCC / LE,请访问以下站点:
TCC / LE替代了CMD命令行(默认的Windows命令提示符)。TCC / LE是CMD的超集,具有111个内部命令(CMD少于40个),240个内部变量和功能以及对现有CMD命令的数百种增强功能。
TCC / LE可与您现有的命令行应用程序和批处理文件一起使用,但在命令行和批处理文件功能方面进行了重大改进,并向您的命令提示符窗口添加了数千种新功能。
我使用TCC / LE已有多年,之前使用了4NT。我对此非常有爱,可以推荐它。我仍然不使用它的唯一原因是因为我现在几乎只使用PowerShell。
取消“终止批处理作业(Y / N)”的主要原因是要循环运行程序(例如:如果程序崩溃,则重新运行)。
这https://stackoverflow.com/a/8185270/1170023帮助导致此解决方案:
@ECHO OFF
rem assumes you have installed pslist from sysinternals to windows PATH
:RUN
echo Starting GoldenEye Dedicated Server
start "" srcds.exe -console -game gesource +maxplayers 16 +map ge_complex
:LOOP
pslist srcds >nul 2>&1
if ERRORLEVEL 1 (
goto RUN
) else (
rem echo Dedicated server is still running
timeout /t 5 >nul
goto LOOP
)