gpt4 book ai didi

batch-file - 通过鼠标(X 控制台按钮)关闭批处理时检测或拦截时刻

转载 作者:行者123 更新时间:2023-12-04 05:38:03 34 4
gpt4 key购买 nike

我需要运行一个批处理“脚本 A”,这仅在批处理通过“是否要退出 [y/n] 问题”以编程方式关闭时或批处理中的所有脚本结束时运行。

如果用户决定在批处理崩溃时通过鼠标按钮(控制台右上角的“X”)关闭批处理,则不幸的是,不会执行“脚本 A”。

如何以编程方式拦截“X”的任何时刻并启动另一批以完成契约?

亲切的问候,

马莱克

最佳答案

以下简单的方案似乎有效。清理脚本通过带有/WAIT 选项的 START 命令调用主脚本。这确保即使关闭窗口杀死子进程,控制也会返回。

父清理脚本通常会提示您是否要“终止批处理作业(是/否)?”如果主脚本通过关闭窗口被杀死。我将 N 输入 START 命令以自动回答该提示(如果出现)。 stderr 到 nul 的外部块重定向抑制了丑陋的 ^C (Control-C) 在主窗口被杀死时显示。

主批处理文件不是直接启动的,而是通过 CMD/C 命令启动的。这确保即使按 Control-C 杀死主脚本,控制也会返回。这也消除了在主脚本中放置 EXIT 命令的需要(可能永远不会以任何方式执行)。

清理.bat

@echo off
:: Launch the main program and don't continue until it completes (or is killed)
2>nul (
echo N|start /wait "" cmd /c main.bat
)

:: Cleanup up begins here
echo Time to wrap it up!

这是一个微不足道的 main.bat 测试返回功能
@echo off
echo This is the main script.
echo(
echo Press any key to close normally
echo or Close this window via the console window X button
echo or Press Ctrl-C to break out of this script abnormally
pause >nul

编辑

当然,没有什么可以阻止用户在主脚本终止之前关闭“cleanup.bat”窗口,这会让您回到第一个 :-(

您可以通过 wscript 运行 VBScript 或 Jscript,而无需关闭任何可见窗口。然后,(VB/J) 脚本可以启动 main.bat 脚本,然后仅在主进程完成(或终止)时启动 cleanup.bat 脚本。这将使最终用户更难以干扰启动清理脚本的过程。

master.vbs
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "D:\test\main.bat", 1, TRUE
WshShell.Run "D:\test\cleanup.bat", 1, TRUE
Set WshShell = Nothing

但是一旦你跨越了这个阈值,为什么不在 (VB/J) 脚本中完成整个项目呢?

关于batch-file - 通过鼠标(X 控制台按钮)关闭批处理时检测或拦截时刻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11657622/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com