使用其他批处理文件停止批处理文件?

时间:2014-11-26 06:47:55

标签: windows batch-file cmd taskkill

我有一个批处理文件,它使用以下命令在新的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 Ctrl + C 。 \ Windows \ SYSTEM32 \ cmd.exe - mybatch.bat"使用主批处理文件。有可能吗?

3 个答案:

答案 0 :(得分:2)

<强> test.bat的

@echo off
title mybatchfile
echo ...do something

<强> testkill.bat

Taskkill /FI "WINDOWTITLE eq mybatchfile"

testkill.bat会杀死test.bat

但你已经尝试过了。

<强>已更新

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

请参阅我的回答here

答案 1 :(得分:1)

没有像&#34;请做一些事情&#34; -message到批处理文件。你必须模仿它,例如:

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

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

在主蝙蝠文件中,而不是taskkill只有echo x>"c:\triggerfile.tmp"

答案 2 :(得分:0)

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

  

SendKey.exe -wn&#34; TestLoop.bat&#34; -ks&#34; {CTRL + C} Y {ENTER}&#34;

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