为什么我使用命令 TASKLIST 没有按预期工作?

Why is my usage of command TASKLIST not working as expected?

我在使用命令 TASKLIST 检查另一个批处理文件的 运行 状态时遇到问题,并根据结果继续处理批处理文件。

这是我的批处理文件的代码,它应该检查另一个批处理文件的 运行 状态:

@echo off
tasklist /FI "WINDOWTITLE eq C:\Windows\system32\cmd.exe - C:\ruta\ejecucion_prueba.bat" /FI "STATUS eq running"
if eq = running "not happening"
if ne = running "start  C:\ruta\ejecucion_prueba.bat"
exit

此代码未按预期运行。执行的输出是:

INFO: No tasks are running which match the specified criteria.
= was unexpected at this time.

有什么问题以及如何正确执行批处理文件?

tasklist.exe 不会写入 stdErr 或记录您可以使用的 ErrorLevel,以确定过滤器是否返回任务。为了确定这一点,您需要使用 find.exefindstr.exe 来检查成功输出中的已知字符或字符串。然后,您可以使用返回的 ErrorLevel 或 Success/Failure 来进行验证。

使用 tasklist.exe 执行此任务的唯一 'relatively robust' 方法是首先确保您最初 运行 您的批处理文件 C:\ruta\ejecucion_prueba.bat 使用以下命令:

Start "?" C:\ruta\ejecucion_prueba.bat

(推荐)

Start "?" "C:\ruta\ejecucion_prueba.bat"

完成后,您可以 运行 您的验证批处理文件,其内容中包含以下行:

%SystemRoot%\System32\tasklist.exe /Fi "ImageName Eq cmd.exe" /Fi "Status Eq Running" /Fi "WindowTitle Eq ? - C:\ruta\ejecucion_prueba.bat" | %SystemRoot%\System32\find.exe "=" 1> NUL || Start "?" "C:\ruta\ejecucion_prueba.bat"

但是,如果您的批处理文件路径包含空格:

C:\ruta\ejecucion prueba.bat

您最初需要 运行 使用:

Start "?" "C:\ruta\ejecucion prueba.bat"

然后将批处理脚本中的命令更改为:

%SystemRoot%\System32\tasklist.exe /Fi "ImageName Eq cmd.exe" /Fi "Status Eq Running" /Fi "WindowTitle Eq ? - \"C:\ruta\ejecucion prueba.bat\"" | %SystemRoot%\System32\find.exe "=" 1> NUL || Start "?" "C:\ruta\ejecucion prueba.bat"

注意:关于您之前打算无限期地运行,(我不推荐)。当您 start 您的 .bat 文件时,Window 标题不会立即在 tasklist.exe 中注册。这意味着,如果您在循环中或通过计划任务 运行 执行此操作,延迟可能会导致您的脚本认为批处理文件不是 运行ning,而实际上是的。