【问题标题】: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" 使用主批处理文件。有可能吗?

【问题讨论】:

  • 向我们展示批处理文件。

标签: windows batch-file cmd taskkill


【解决方案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+C}Y{ENTER}"

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多