使用另一个批处理文件停止一个批处理文件?
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的服务 ?
我有一个批处理文件。当我运行它时,我希望它使用另一个批处理文件打开文件。但是怎么做?