Sri*_*nth 189 windows batch command-line
在 cmd 中,当我们按 Ctrl+C 时,我们会终止目标应用程序,但是如果目标应用程序是从批处理文件中调用的,我们会收到“终止批处理作业 (Y/N)”确认。我永远不会记得我选择不终止批处理作业的实例。我们如何跳过此确认?
Gri*_*ave 69
在这个网站上,我找到了一个有效的解决方案:
script2.cmd < nul
Run Code Online (Sandbox Code Playgroud)
每次我script.cmd
在同一个文件夹中调用第二个脚本时都不必输入上面的行。我只在 XP 上测试过这种技术,但其他人已经在 Win 7 上证实了它。
Nathan 补充说:另一种选择是将以下代码放在 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
)
Run Code Online (Sandbox Code Playgroud)
Kir*_*sky 67
按Ctrl+C两次。
Bin*_*fit 65
AFAIK 你不能,因为这种行为是由命令解释器设计和控制的。除非您直接反编译并重新编译解释器,否则没有“映射”甚至“拦截”的方法。
Mac*_*cke 41
安装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
Run Code Online (Sandbox Code Playgroud)
这然后“适用于”任何cmd.exe
窗口。您无需更改正在运行的内容或其他内容,因为 clink 附带cmd.exe
.
1
真棒,海事组织!
1但是您需要关闭并重新打开cmd.exe
才能生效。
sgm*_*ore 19
如果在应用程序正常完成后不需要在批处理文件中执行任何操作,则使用该start
命令可确保在按 Ctrl-C 时批处理文件已经完成。因此该消息不会出现。
例如:
@回声关闭 设置 my_command=ping.exe 设置 my_params=-t www.google.com echo 'start' 执行的命令:%my_command% %my_params% :: 当不使用 /B 或 /WAIT 时,这将创建一个新窗口,而 :: 这个批处理文件的执行将在当前窗口中继续: 开始 %my_command% %my_params% 回声。 echo 此行将在 'start' 完成之前执行。所以这 echo 批处理文件将在另一个窗口中按 Ctrl-C 之前完成。 回声。 :: 只是为了测试使用“暂停”来显示“按任意键继续”,看看 :: 'echo' 命令的输出。请务必在窗口中按 Ctrl-C :: 运行“ping”命令(不在这个窗口中)。或者干脆删除 :: 困惑时的下一行: 暂停
(在 Windows XP 上测试。)
Vip*_*eek 14
我一直在与这种避免“终止批处理作业”提示的愿望作斗争。
我最近的顿悟是通过用另一个实例替换一个实例(或控制台窗口)有点花招cmd.exe
。这是start cmd /k
通过exit
在.BAT
文件中紧接着执行命令/程序来完成的。
原来的控制台窗口消失了,替换的窗口可以通过Ctrl-干净地停止C。
考虑以下 atraceroute
可以被Ctrl+中断C或允许完成的示例,将用户返回到C:\>
提示:
@echo off
set timeout=100
if not "%2"=="" set timeout=%2
start cmd /k tracert -w %timeout% %1
exit
Run Code Online (Sandbox Code Playgroud)
新命令解释器的环境替代可能并不适合所有人,但从肉眼来看,对我来说看起来和工作得很好。
Ale*_*Mev 13
Gringo 的解决方案很好,但不适用于传递参数列表(即python myscript.py %*
)的脚本,因为SHIFT
不更新%*
。有一些变通方法,但它们有一定的局限性。
这是我最终得到的修改:
IF [%JUSTTERMINATE%] == [OKAY] (
SET JUSTTERMINATE=
python myscript.py %*
) ELSE (
SET JUSTTERMINATE=OKAY
CALL %0 %* <NUL
)
Run Code Online (Sandbox Code Playgroud)
99.(9)% 完美无瑕。
TCC/LE是一个免费的 CMD 替代品(将其视为 CMD++),它有一个选项可以取消终止批处理作业提示。您可以在TCC 启动配置对话框中找到该选项:
按 Ctrl-C取消批处理文件:按 Control-C 时,在没有通常提示的情况下取消批处理文件处理。
截屏:
如果您以前从未听说过 TCC/LE,这里有一些来自该网站的简介:
TCC/LE 是 CMD 命令行(默认的 Windows 命令提示符)的替代品。TCC/LE 是 CMD 的超集,有 111 个内部命令(CMD 少于 40 个),240 个内部变量和函数,以及数百个对现有 CMD 命令的增强。
TCC/LE 与您现有的命令行应用程序和批处理文件一起使用,但在命令行和批处理文件功能方面提供了重大改进,并向您的命令提示符窗口添加了数千个新功能。
我使用 TCC/LE 多年,之前使用 4NT。我非常喜欢它,可以推荐它。我不再使用它的唯一原因是我现在几乎只使用 PowerShell。
归档时间: |
|
查看次数: |
137409 次 |
最近记录: |