由于尚未确定的原因, / 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 启动开关?解释为什么它不能正常工作也会很好。
答案 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
可以很好地与交互式批处理...