如何在批处理文件(tasklist)中用空格标识IMAGENAME?

时间:2014-10-22 23:40:16

标签: windows batch-file tasklist

现在,我正在编写一个批处理文件,其中包含一行,用于识别进程是否从我的进程列表中运行。

我指的是:

FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto ProcessFound 

EXE事先定义为EXE = My Process Here.exe

我的批处理文件适用于正常进程,但正如您在My Process Here.exe中看到的那样,My和Process以及Here.exe之间存在空格,这是无法识别的。

有什么方法可以解决这个问题吗?我正在寻找的过程有空格,我无法更改进程名称,因为它与之相关的程序将无法运行。

感谢。

3 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "exe=7+ Taskbar Tweaker.exe"
FOR /F %%x IN ('tasklist ^|FINDSTR /i /b /L /c:"%EXE%"') DO IF NOT ERRORLEVEL 1 goto ProcessFound1
ECHO "%exe%" not found
GOTO again
:Processfound1
ECHO "%exe%" found!
:again
SET "exe=I dont exist.exe"
FOR /F %%x IN ('tasklist ^|FINDSTR /i /b /L /c:"%EXE%"') DO IF NOT ERRORLEVEL 1 goto ProcessFound1
ECHO "%exe%" not found
GOTO :eof
:Processfound2
ECHO "%exe%" found!
GOTO :EOF

这可能对你有用。当然,您需要修复进程名称。

答案 1 :(得分:0)

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "exe=My Process Here.exe"

    set "processFound="
    for /f "tokens=5 delims=," %%a in ('
        tasklist /fi "imagename eq %exe%" /fo:csv /nh
    ') do set "processFound=1"

    if defined processFound (
        echo %exe% is running
    ) else (
        echo %exe% is NOT running
    )

tasklist将检索指定图像名称和csv格式的进程列表,不带标题。

有两个选项:进程未运行,然后输出中没有csv记录,或者进程正在运行,并且ouptut中有csv记录。

for命令将尝试对tasklist的输出进行标记,并使用逗号作为分隔符检索行中的第5个标记。

如果tasklist的输出是csv记录,则此标记将存在,可替换参数将获取数据,并且将执行do子句中的代码。如果输出不是csv记录,则该标记将不存在,并且do子句中的代码将不会被执行。

答案 2 :(得分:0)

之前的答案都没有用于识别带有嵌入空格的图像名称。对我有用的是使用“delims = tab”,其中tab是实际的制表符,如:

FOR /F "delims=tab" %%X IN ('tasklist /NH /FI "IMAGENAME eq !EXE!"') DO (...

结果%% X将是对应于!EXE的整个任务列表条目! imagename,如果找到,或“INFO:没有正在运行的任务与指定的条件匹配”,如果找不到,可以通过以下方式执行:

    SET TASKLINE=%%X
    IF "!TASKLINE!"=="!TASKLINE:No tasks are running=!" (
        ECHO !EXE! FOUND IN !TASKLINE!
    ) ELSE (
        ECHO !EXE! NOT FOUND IN !TASKLINE!))