使用另一个批处理文件停止一个批处理文件?

Posted

技术标签:

【中文标题】使用另一个批处理文件停止一个批处理文件?【英文标题】:Stop a batch file using another batch file? 【发布时间】:2015-01-24 09:55:30 【问题描述】:

我有一个批处理文件,它使用以下命令在新的 cmd 提示符下启动一个新的批处理文件:

C:\Windows\System32\cmd.exe /c "start mybatch.bat"

mybatch.bat 进程继续运行,直到有人停止它。当我们使用 Ctrl+C 信号关闭这个批处理文件时,它会执行收集覆盖数据的操作,然后出来。启动 mybatch 文件后,我正在对父批处理文件执行一些其他过程,然后我想停止 mybatch 文件。

我尝试使用taskkill 使用父批处理文件中的命令关闭进程:

taskkill /fi "windowtitle eq c:\Windows\SYSTEM32\cmd.exe - mybatch.bat"

这里的问题是它强制停止批处理文件,不允许它运行如果我手动使用 Ctrl+C 会发生的覆盖过程。关于如何使用父批处理文件停止 mybatch 文件有什么想法吗?

一切都是使用批处理文件完成的。非常感谢任何帮助。

我的主批处理文件如下所示:

start mybatch.bat
REM do something like copying files, running tests, etc
taskkill /fi "windowtitle eq c:\Windows\SYSTEM32\cmd.exe - mybatch.bat"

在上面的代码中而不是 taskkill 如果我想在命令提示符下使用 windowtitle "c:\Windows\SYSTEM32\ 执行 Ctrl+C 怎么办cmd.exe - mybatch.bat" 使用主批处理文件。有可能吗?

【问题讨论】:

向我们展示批处理文件。 【参考方案1】:

没有像“请做点什么”这样的消息——批处理文件。你必须模仿它,例如这样:

REM mybatch.bat
:loop
REM do useful things
if not exist "c:\triggerfile.tmp" goto :loop

del "c:\triggerfile.tmp"
REM do "postprocessing"
exit

在您的主 bat 文件中,而不是 taskkill 只是 echo x>"c:\triggerfile.tmp"

【讨论】:

【参考方案2】:

test.bat

@echo off
title mybatchfile
echo ...do something

testkill.bat

Taskkill /FI "WINDOWTITLE eq mybatchfile"

testkill.bat 会杀死 test.bat

但你已经尝试过了。

更新

无法从另一个批次停止批次。但是您可以将批处理作为服务运行以设置进程名称,然后您可以定义在启动和停止时应该做什么。该服务可以从批处理文件中终止。

看我的回答here

【讨论】:

【参考方案3】:

我已经实现了 SendKey.exe 实用程序(Delphi 控制台应用程序),它模拟按键,但它是内部应用程序的一部分。我尝试了以下命令,它运行良好。应用使用 keybd_event Win32 调用。

SendKey.exe -wn "TestLoop.bat" -ks "CTRL+CYENTER"

您可以使用NirCmd 发送我认为应该可以使用的按键。

【讨论】:

以上是关于使用另一个批处理文件停止一个批处理文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何用批处理文件(.bat)停止或启动windows的服务 ?

使用另一个批处理文件运行位于子目录中的批处理文件[重复]

我有一个批处理文件。当我运行它时,我希望它使用另一个批处理文件打开文件。但是怎么做?

从批处理文件中读取网络路径并使用批处理文件脚本将其写入另一个批处理文件

在服务停止完成之前暂停批处理文件?

通过批处理或 cmd 文件停止和启动服务?