4

我有一个批处理文件,它使用以下命令在新的 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\cmd.exe - mybatch.bat"执行Ctrl+ ,而不是执行什么操作。C可能吗?

4

3 回答 3

3

测试.bat

@echo off
title mybatchfile
echo ...do something

testkill.bat

Taskkill /FI "WINDOWTITLE eq mybatchfile"

testkill.bat 将杀死 test.bat

但是你已经尝试过了。

更新

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

在这里查看我的答案

于 2014-11-26T08:47:40.063 回答
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"

于 2014-11-26T07:10:38.530 回答
0

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

SendKey.exe -wn "TestLoop.bat" -ks "{CTRL+C}Y{ENTER}"

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

于 2014-11-29T20:16:53.803 回答