“start / b”似乎导致批处理脚本中的“taskkill”失败

时间:2013-12-27 22:09:34

标签: windows batch-file taskkill

由于尚未确定的原因, / b 中的 / b 切换导致 taskkill 无法找到第一个实例:

INFO: No tasks running with the specified criteria

这是相关代码的一个简单示例( / b 并且不起作用)。复制代码并粘贴到记事本中并另存为批处理文件。它将使用cmd开关“/ k”重新启动,然后它将创建第二个实例,然后第二个实例将尝试结束第一个实例。如果需要,可以找到原始脚本here

@prompt :
%zero%@set zero=::&start /b "" "cmd" /k "%~dpnx0"&goto :eof

%first%@TITLE First Instance
%first%@set first=::&start "" cmd /C "%~dpnx0"&goto :waiting

taskkill /F /FI "WINDOWTITLE eq First Instance"
taskkill /F /FI "WINDOWTITLE eq Administrator:  First Instance"

:waiting
pause>nul

以下是没有 / b 开关的相同示例。这是两者之间的唯一区别。它的工作原理应该是:

@prompt :
%zero%@set zero=::&start "" "cmd" /k "%~dpnx0"&goto :eof

%first%@TITLE First Instance
%first%@set first=::&start "" cmd /C "%~dpnx0"&goto :waiting

taskkill /F /FI "WINDOWTITLE eq First Instance"
taskkill /F /FI "WINDOWTITLE eq Administrator:  First Instance"

:waiting
pause>nul

重申我的问题:如何让taskkill使用 / b 启动开关?解释为什么它不能正常工作也会很好。

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
@prompt :
%zero%@set zero=::&start "Zeroth instance" "cmd" /k "%~dpnx0"&pause&goto :eof
ECHO Maybe CHANGE TITLE...
pause
%first%@TITLE First Instance
%first%@set first=::&start "Second instance" cmd /C "%~dpnx0"&goto :waiting
ECHO got here-------------
pause
taskkill /F /FI "WINDOWTITLE eq First Instance"
taskkill /F /FI "WINDOWTITLE eq Administrator:  First Instance"

:waiting
ECHO waiting...
PAUSE
exit
GOTO :EOF

有很多回声和暂停的微小变化......

如果您使用tasklist /v|find /i "cmd"运行其他会话,您会发现使用上述代码,当相应的pause收到一个时,窗口标题“Zeroth instance”将更改为“First instance”响应。允许'Second instance to reach the taskkill s will close the Zeroth / First`窗口,如果新窗口到达exit语句,则该实例终止。一切都很好,也很好。使用附加会话,您可以看到输入的各个阶段。

如果重新引入/b开关,那么 THAT 实例不再有自己的窗口,因此它没有的窗口不能有标题。您可以使用其他会话查看此内容。现在 - 让特定会话终止是一个游戏......不确定start /b可以很好地与交互式批处理...