我有一个批处理文件,它使用以下命令在新的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"使用主批处理文件。有可能吗?
答案 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发送我认为应该有效的按键。