为什么我使用命令 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.exe
或 findstr.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,而实际上是的。
我在使用命令 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.exe
或 findstr.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,而实际上是的。